2016-10-08 26 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();