无法使用Gson

时间:2016-04-02 16:48:12

标签: android arraylist gson sharedpreferences

我正在使用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();

我试图为这些列表设置空值,因为我没有找到任何其他方法从共享首选项中删除数据,但问题是此代码也无法正常工作,我仍然可以看到存储来自共享偏好的数据。

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

1 个答案:

答案 0 :(得分:1)

  

从共享偏好设施中删除数据的正确方法应该是什么。

使用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更好。