Почему preferences.getString(key, DEFAULT) всегда возвращает DEFAULT?

У меня есть user_preferences.xml в моем каталоге XML. PreferencesActivity использует этот файл для создания активности пользовательских настроек... и это работает. Все, что пользователь выбирает здесь, сохраняется. Но я не могу получить значение, выбранное пользователем.

Когда я использую...

SharedPreferences preferences = getSharedPreferences("user_preferences.xml", 0);    
String mapTypeString = preferences.getString("map_type_pref_key", "DEFAULT");

... mapTypeString всегда "ПО УМОЛЧАНИЮ".

Кажется, что мой user_preferences.xml не найден, когда я создаю экземпляр своего объекта SharedPreferences. Но PreferencesActivity его находит, конечно. Итак, что мне не хватает?

Большое спасибо!


person Hap    schedule 06.03.2012    source источник
comment
Вы уверены, что читаете один и тот же файл настроек?   -  person SERPRO    schedule 06.03.2012
comment
В onCreate() в моей PreferenceActivity я использую addPreferencesFromResource(R.xml.user_preferences); Так что, может быть, мне нужно указать файл по-другому, когда я создаю объект SharedPreferences?   -  person Hap    schedule 06.03.2012
comment
@SERPRO есть проблема, потому что xml находится внутри каталога xml?   -  person Hap    schedule 06.03.2012
comment
взгляните на этот вопрос. это может быть полезно для вас stackoverflow.com/ вопросы/5652682/   -  person SERPRO    schedule 06.03.2012


Ответы (2)


измените свой код на:

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);   
 String mapTypeString = preferences.getString("map_type_pref_key", "DEFAULT");
person ligi    schedule 06.03.2012
comment
Это работает, спасибо. Но я все еще немного сбит с толку... Я использую другой xml, который также хранит настройки в том же действии. Почему getDefaultSharedPreferences дает мне user_preferences.xml, а не другой, settings.xml? - person Hap; 06.03.2012

Вы должны зафиксировать настройки после редактирования.

SharedPreferences preferences = getSharedPreferences("user_preferences.xml", 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("map_type_pref_key", "blah_blah");
editor.commit();
person AiOO    schedule 01.08.2014
comment
Но я не могу получить значение, выбранное пользователем. Он хочет вернуть, а не изменить. - person António Paulo; 08.04.2016
comment
Это вполне может быть проблемой, если OP никогда не устанавливает значение с помощью commit () или apply (), данные никогда не будут получены, но для этого потребуется больше разъяснений по вопросу. - person JFed-9; 20.03.2020