我像这样使用 Gson 库在共享首选项中保存自定义对象列表
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(planmanobraBeanArrayList);
prefsEditor.putString("list", json);
prefsEditor.apply();
为了从共享首选项中获取数据,我使用了以下代码
Gson gson = new Gson();
String json1 = mPrefs.getString("list", "");
Type type = new TypeToken<ArrayList<PlanmanobraBean>>() {
}.getType();
storedata = gson.fromJson(json1, type);
这东西工作得很好,但我在将它们从共享首选项中删除时遇到了问题。
我想在单击按钮时将其从共享首选项中删除,并且此按钮处于 Activity 中,该 Activity 在我存储数据的 Activity 之前打开。所以在点击上一个 Activity 的按钮时我做了这个
mPrefs = PlaniActivity.this.getPreferences(MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
prefsEditor.putString("list", "");
prefsEditor.apply();
SharedPreferences.Editor prefsEditor1 = mPrefs.edit();
prefsEditor1.putString("platamatBeansArrayList", "");
prefsEditor1.apply();
我试图为这些列表设置空值,因为我没有找到任何其他方法从共享首选项中删除数据,但问题是这段代码也不起作用,我仍然能够从中看到存储的数据共享偏好。
从共享首选项中删除数据的正确方法应该是什么。
最佳答案
What should be the proper way of removing data from shared preferences.
使用remove
方法可能是正确的方法。
mPrefs = PlaniActivity.this.getPreferences(MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
prefsEditor.remove("list");
你也只需要一个编辑器,所以继续删除项目
prefsEditor.remove("platamatBeansArrayList");
而且您只需要在最后申请或提交一次,因为所有事件都已排队。
prefsEditor.apply();
关于跨 Activity 使用 SharedPreferences,我通常使用 Singleton 类来处理所有这些,但是 getApplicationContext().getSharedPreferences()
可能比仅获取当前 Activity 的 SharedPreferences 效果更好。
关于android - 无法使用 Gson 从另一个 Activity 的共享首选项中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376033/