[英]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()
- 此方法同步運行,這意味着:
apply()
- 此方法異步運行,這意味着:
最后,sharedPreferences 實例是單例的,如果您已經忽略了返回值,則可以安全地將任何 commit() 實例替換為 apply()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.