我使用这样的Gson Library在共享首选项中保存了自定义对象的列表

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);


这个东西工作正常,但是我在将它们从共享首选项中删除时遇到问题。

我想从单击按钮的共享首选项中将其删除,并且此按钮处于活动状态,该活动在此活动之前打开,该活动用于存储数据。因此,在单击上一个活动的按钮时,我执行了此操作

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();


我尝试为这些列表添加空值,因为没有找到其他方法从共享首选项中删除数据,但是问题是此代码也无法正常工作,我仍然能够从共享首选项中查看存储的数据。

从共享首选项中删除数据的正确方法应该是什么?

最佳答案

从共享首选项中删除数据的正确方法应该是什么?


使用remove方法可能是正确的方法。

mPrefs = PlaniActivity.this.getPreferences(MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
prefsEditor.remove("list");


您还只需要一个编辑器,因此只需删除项目即可

prefsEditor.remove("platamatBeansArrayList");


而且您只需要在最后应用或提交一次,因为所有事件都已排队。

prefsEditor.apply();


关于跨活动使用SharedPreferences,我通常使用Singleton类来处理所有这些,但是getApplicationContext().getSharedPreferences()可能比仅针对当前Activity获得SharedPreferences更好。

08-27 06:05