2016-10-08 115 views
0

我知道這個問題已經有噸噸的答案,但我還沒有找到我的問題的答案。SharedPreference提交後未更新()

這裏是我的代碼:

SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE); 

//Creating editor to store values to shared preferences 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.clear(); 

//Adding values to editor 
editor.putBoolean(Config.LOGGEDIN_SHARED_PREF, true); 
editor.putString(Config.PHONE_SHARED_PREF, phoneNo); 
Log.d("debug", "config "+Config.PHONE_SHARED_PREF); 
Log.d("debug", "config "+phoneNo); 

//Saving values to editor 
editor.apply(); 
editor.commit(); 

我明白了什麼是,editor.putString(Config.PHONE_SHARED_PREF, phoneNo)意味着節省phoneNo價值爲PHONE_SHARED_PREF。如果我錯了,請糾正我。

但是,在Log中,Config.PHONE_SHARED_PREF顯示默認值,而不是在phoneNo中分配的新值。這意味着phoneNo的值沒有正確保存,不是?

有人可以向我解釋我的代碼有什麼問題嗎? :/

+0

'commit()'和'apply()'是相同的,後者不返回布爾值。刪除並重試。您可以使用'editor.getString(Config.PHONE_SHARED_PREF,「」)''來獲取值。如果密鑰不存在,則返回第二個參數。 –

+1

對不起,請嘗試'sharedPreferences.getString(...)'。 –

+0

它什麼也沒有返回(第二參數) – August

回答

2
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE); 

//Creating editor to store values to shared preferences 
SharedPreferences.Editor editor = sharedPreferences.edit(); 
editor.clear(); 

//Adding values to editor 
editor.putBoolean(Config.LOGGEDIN_SHARED_PREF, true) 
     .putString(Config.PHONE_SHARED_PREF, phoneNo) 
     .commit(); // returns true if successfully saved. 

Log.d("debug", "config " + sharedPreferences.getString(Config.PHONE_SHARED_PREF, ""); 

試試上面。

+0

這個作品!謝謝!介意解釋一下?在共享首選項中仍然是新的:) – August

+1

除了包含'apply()'和'commit()'的部分,您在代碼中完成的所有操作看起來都是正確的。從本質上講,你只需要使用一個,而不是兩個。你可以參考http://stackoverflow.com/questions/5960678/whats-the-difference-between-commit-and-apply-in-shared-preference來理解兩者之間的區別。 –

+0

如果可能,請接受答案,如果他們正在尋找類似的幫助,這對未來的其他人會有幫助。 :] –

1

試試這個。

SharedPreferences sharedPreferences = getActivity().getSharedPreferences(Config.SHARED_PREF_NAME, Activity.MODE_PRIVATE); 

sharedPreferences.edit().putBoolean(Config.LOGGEDIN_SHARED_PREF, true).commit(); 
sharedPreferences.edit().putString(Config.PHONE_SHARED_PREF, phoneNo).commit();