android - 无法使用 Gson 从另一个 Activity 的共享首选项中删除数据

标签 android arraylist gson sharedpreferences

我像这样使用 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/

相关文章:

java - 安卓java : foreach through json array returning values?

java - CAPD远程监控系统

java - 无法实现自定义ArrayList的RecycleAdapter获取数据库随机查询结果

java - GSON - 转换字符串不区分大小写

android - 即使在增加数据库版本后,SQLite 数据库也不会在从 Play 商店更新应用程序时更新

android - 在多个 Activity 中使用抽屉导航

java - 使用确定的默认成员类型扩展 ArrayList

java - 在 `ArrayList` 末尾添加一行

java - Gson 序列化 Integer 对象

android - GSON:仅在已发布的应用程序中使用我的 JSONEntity 无法正确创建,使用 Android Studio 可以正常工作