簡體   English   中英

為什么我的 SharedPreferences 在單擊按鈕時不保存?

[英]Why don't my SharedPreferences save on button click?

所以我試圖向我的SharedPreferences添加一些值,但每次我單擊按鈕時,它都會使用默認值00因此即使不應該,我的 if 語句也總是返回 true。

private static final String SHARED_FREFS = "sharedPrefs";
private static final String STATE = "state";

這是按鈕點擊事件

public void onClick(View v) {
                SharedPreferences sharedPreferences = getSharedPreferences(SHARED_FREFS, MODE_PRIVATE);
                SharedPreferences.Editor editor =  sharedPreferences.edit();

                int currentTime = Calendar.getInstance().getTime().getMinutes();
                String eh = sharedPreferences.getString(STATE,  "00");

                if(!Integer.toString(currentTime).equalsIgnoreCase(sharedPreferences.getString(STATE,  "00"))){
                    GetData();
                    editor.putString(STATE, Integer.toString(currentTime));
                    Log.e("ATTENTION!:", "METHOD HAS BEEN FIRED!");
                }
            }
        });

我試圖將當前分鍾存儲在那里,但它沒有這樣做。 我是否需要一個名為 data 的文件夾,其中包含一個名為sharedPrefs的 xml 文件?

為什么我的 SharedPreferences 在單擊按鈕時不保存?

因為您忘記在SharedPreferences保存更新

你需要使用editor.apply(); editor.commit(); SharedPreferences添加數據后

樣本

public void onClick(View v) {
                SharedPreferences sharedPreferences = getSharedPreferences(SHARED_FREFS, MODE_PRIVATE);
                SharedPreferences.Editor editor =  sharedPreferences.edit();

                int currentTime = Calendar.getInstance().getTime().getMinutes();
                String eh = sharedPreferences.getString(STATE,  "00");

                if(!Integer.toString(currentTime).equalsIgnoreCase(sharedPreferences.getString(STATE,  "00"))){
                    GetData();
                    editor.putString(STATE, Integer.toString(currentTime));
                    editor.apply();
                    Log.e("ATTENTION!:", "METHOD HAS BEEN FIRED!");
                }
            }
        });

當我看到您的代碼時,在共享首選項編輯器中添加數據后,您始終需要使用editor.commit()editor.apply() 應該使用哪一種,請看下圖:

commit() - 此方法同步運行,這意味着:

  1. 線程安全。
  2. 減緩。
  3. 並始終提供反饋。

apply() - 此方法異步運行,這意味着:

  1. 不是線程安全的。
  2. 跑得很快。
  3. 並且不提供反饋。

最后,sharedPreferences 實例是單例的,如果您已經忽略了返回值,則可以安全地將任何 commit() 實例替換為 apply()。

更新 sharePrefs 上的任何內容后,始終在編輯器上提交應用

mEditor.commit();

暫無
暫無

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

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