簡體   English   中英

無法使用 Gson 從另一個活動的共享首選項中刪除數據

[英]Unable to remove data from shared preferences from another activity using Gson

我正在使用這樣的 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);

這東西運行良好,但我在從共享首選項中刪除它們時遇到問題。

我想在單擊按鈕時將其從共享首選項中刪除,並且此按鈕處於活動中,該活動在我存儲數據的此活動之前打開。 因此,在單擊上一個活動的按鈕時,我執行了此操作

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()可能比僅獲取當前活動的 SharedPreferences 工作得更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM