首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只能从数组中获得行,不能存储多个行的覆盖

只能从数组中获得行,不能存储多个行的覆盖
EN

Stack Overflow用户
提问于 2015-06-27 09:41:27
回答 1查看 32关注 0票数 0

如果Anny知道这个问题,请提前告诉我一个解决方案-- addFavorite方法只能从数组中获取行,不能存储超过一个行--它用getfavourites方法覆盖

代码语言:javascript
复制
 public class SharedPreference {

    public static final String PREFS_NAME = "PRODUCT_APP";
    public static final String FAVORITES = "Product_Favorite";

    public SharedPreference() {
        super();
    }

    // This four methods are used for maintaining favorites.
    public void saveFavorites(Context context, List<Product> favorites) {
        SharedPreferences settings;
        Editor editor;

        settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);
        editor = settings.edit();

        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(favorites);

        editor.putString(FAVORITES, jsonFavorites);

        editor.commit();
    }

    public void addFavorite(Context context, Product product) {
        List<Product> favorites = getFavorites(context);
        if (favorites == null)
            favorites = new ArrayList<Product>();
        favorites.add(product);
        saveFavorites(context, favorites);
    }

    public void removeFavorite(Context context, Product product) {
        ArrayList<Product> favorites = getFavorites(context);
        if (favorites != null) {
            favorites.remove(product);
            saveFavorites(context, favorites);
        }
    }

    public ArrayList<Product> getFavorites(Context context) {
        SharedPreferences settings;
        List<Product> favorites;

        settings = context.getSharedPreferences(PREFS_NAME,
                Context.MODE_PRIVATE);

        if (settings.contains(FAVORITES)) {
            String jsonFavorites = settings.getString(FAVORITES, null);
            Gson gson = new Gson();
            Product[] favoriteItems = gson.fromJson(jsonFavorites,
                    Product[].class);

            favorites = Arrays.asList(favoriteItems);
            favorites = new ArrayList<Product>(favorites);
        } else
            return null;

        return (ArrayList<Product>) favorites;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-27 09:51:59

每次在add方法中,您都使用了新关键字,这意味着您正在用新列表覆盖之前的列表。首先需要从存储的共享Prefrence中添加getList,然后将新项添加到该列表中。

代码语言:javascript
复制
public void addFavorite(Context context, Product product) {
    List<Product> favorites = new ArrayList<Product>();


    // this line cause you problem.
    //   favorites = new ArrayList<Product>();
    // this line cause you problem.

    // add code from below line

    favorites=getFavorites(context);
    if(favorites!=null)
    {
        favorites.add(product);
    }

    saveFavorites(context, favorites);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31087286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档