2016-10-08 3 views
0

Я знаю, что этот вопрос уже имеет тонны ответов в SO, но я не нашел ответа на свою проблему.SharedPreference не обновляется после commit()

Вот мой код:

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. Пожалуйста, поправьте меня, если я ошибаюсь.

Но когда в журнале, Config.PHONE_SHARED_PREF напечатано значение по умолчанию вместо нового значения, назначенного в phoneNo. Это значит, что значение phoneNo не правильно сохранено, нет?

Может кто-нибудь объяснить мне, что случилось с моим кодом? :/

+0

'commit()' и 'apply()' совпадают с последним, не возвращающим логическое значение. Удалите и повторите попытку. Вы можете получить значение с помощью 'editor.getString (Config.PHONE_SHARED_PREF," ")'. Второй параметр возвращается, если ключ не существует. –

+1

Извините, попробуйте 'sharedPreferences.getString (...)'. –

+0

ничего не возвращает (2-й параметр) – 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(); 
Смежные вопросы