Android sharedPreferences устанавливает проблему значений по умолчанию

Я использую некоторые действия в своем проекте. Один из них расширен от PreferenceActivity. У меня есть CheckBoxPreference и EditTextPreference, я могу получить значения из всех других действий, используя:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
pref = sharedPrefs.getString("edit_text_pref", "error");

но когда я открываю свое приложение, значения должны быть установлены по умолчанию, поэтому я использую:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit(); 

в моей основной деятельности. Все должно быть в порядке, но если я пытаюсь получить предпочтение, прежде чем устанавливать его из меню настроек, я получаю "ошибку", а не значение по умолчанию, которое я установил в файле настроек xml. Если я прокомментирую getDefaultSharedPreferences линия работает нормально, но, очевидно, когда я открываю приложение, я получаю старые настройки. Как я могу обойти эту проблему?

3 ответа

Решение

Вы получаете само значение по умолчанию, то есть "ошибка", потому что в Preferences, когда вы получаете значение какого-либо предпочтения, вам нужно указать значение, которое должно быть возвращено, если предпочтение не было установлено ранее. В вашем случае, так как вы устанавливаете значение по умолчанию "ошибка" здесь pref = sharedPrefs.getString("edit_text_pref", "error"); так вот что вы получите в качестве значения по умолчанию.

Загляните в http://developer.android.com/reference/android/preference/PreferenceManager.html

Вы должны использовать это setDefaultValues (Context context, int resId, boolean readAgain) что-то вроде

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

Внимательно посмотрите на раздел заметок в параметрах. Это зачатие читать снова Параметры

context Контекст общих настроек.

resId Идентификатор ресурса предпочтительного XML-файла.

readAgain Перечитывать ли значения по умолчанию. Если false, этот метод устанавливает значения по умолчанию, только если этот метод никогда не вызывался в прошлом (или если KEY_HAS_SET_DEFAULT_VALUES в значении по умолчанию файл общих настроек имеет значение false). Чтобы снова попытаться установить значения по умолчанию, минуя эту проверку, установите для readAgain значение true.

Примечание: это НЕ сбрасывает настройки обратно к значениям по умолчанию. Для этой функциональности используйте getDefaultSharedPreferences(Context) и очистите его, а затем вызовите этот метод с этим параметром, установленным в true

Так что я думаю, что после очистки вам нужно установить его по умолчанию, передавая readAgain как true

что-то вроде

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit().clear().commit();
 PreferenceManager.setDefaultValues(this, R.xml.preference, true);

Хорошо, я подумал, что "ошибка" - это значение, использованное, если произошла ошибка при чтении значения, а не если значение не было установлено!!

Спасибо, это должно быть работа, я собираюсь попробовать

Другие вопросы по тегам