【问题标题】:override arraylist on shared preferences覆盖共享首选项的arraylist
【发布时间】:2018-12-23 13:56:21
【问题描述】:

我在共享首选项上保存了一个数组列表,但是当我向这个数组添加新的东西时,它会删除旧的并只显示新的。

这是来自共享首选项的保存和加载数组

//SHARED PREFERENCES Save ArrayList
public boolean saveArrayList(SharedListFood list) {
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list.getMlist()); //put in json the list from my model(SharedFoodList) which is the list i provide(itemsAdded)
    editor.putString("testShared", json);
    return editor.commit();     // This line is IMPORTANT !!!
}

//SHARED PREFERENCES Load ArrayList
public ArrayList<String> getArrayList() {

    ArrayList<String> loadArrayList;

    Gson gson = new Gson();
    String json = prefs.getString("testShared", null);
    Type type = new TypeToken<ArrayList<String>>() {
    }.getType();
    loadArrayList = gson.fromJson(json, type);

    return loadArrayList;

}

我在这里添加项目。

   searchList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                searchMessage = searchList.getItemAtPosition(position).toString(); //searchMessage gets the value of the pressed item in list

                if(searchMessage.contains("two")){
                    Log.d("alekos","tak"+searchMessage);
                }
                Toast.makeText(AddFood.this, "" + searchMessage, Toast.LENGTH_SHORT).show();

                itemsAdded.add(searchMessage);// made it static so it is created here but displayed in the AddFoodBasket.java
         sharedArray=new SharedListFood(itemsAdded);

                boolean isSuccess= sharedArrayPreferencesHelper.saveArrayList(sharedArray); //sends itemsAdded to saveArrayList in shared preferences
                if (isSuccess) {
                    Toast.makeText(getApplicationContext(),"Personal information saved", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(),"Personal information NOT", Toast.LENGTH_LONG).show();
                }
            }
        });

itemsAdded 是我每次要添加的数组列表

【问题讨论】:

  • 您在哪里添加了新项目,请分享
  • 您确定您在代码中的其他地方使用getArrayList() 来初始化您的SharedListFood 模型吗?我这里没看到...
  • @Radesh 查看我更新的问题
  • 在哪里添加新项目到 itemsAdded 中?
  • 你可以使用github.com/AliEsaAssadi/Android-Power-Preference来存储一个数组

标签: android sharedpreferences


【解决方案1】:

据我了解,
1.你在saveArrayList()里面写了SharedPreferences.Editor
2. 每次调用此方法时,您都会创建一个新的编辑器,它会替换 上一个。
3. SharedPreferences 存储在键值对中,并且您将数据存储在同一个键中 每次。 (它将以前的值替换为新值)
4. 你的代码可能对数据是正确的,但流程是错误的。尝试处理您的代码- 流。
希望能帮助到你。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2015-11-29
    相关资源
    最近更新 更多