SharedPreferences имеет метод getAll, но он не возвращает никаких записей, несмотря на то, что некоторые ключи существуют:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
возвращает истину
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
возвращает пустую карту
Что случилось? Как получить список всех общих предпочтений?
android
sharedpreferences
Евгений Чумак
источник
источник
getAll()
может возвращатьNULL
значение. Было бы лучше проверитьkeys
на NULL.entry.getValue()
, чемentry.getValue().toString()
не получать исключение NullPointerException)я думаю, вопрос больше в том, почему
PreferenceManager.getDefaultSharedPreferences(this).getAll()
возвращает пустую / противоречащую карту, чем с помощью итерации по стандартной карте Java. андроид документ на самом деле не кристально ясно о том, что происходит здесь , но в основном это кажется, что первый вызов когда - либо в
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- это то, что вы должны вызывать для инициализации предпочтений при запуске приложения - создает своего рода кешированную версию ваших предпочтений, которая вызывает несогласованную обработку будущих изменений в вашем файле предпочтений xml, то есть вызывает несоответствие вам описано в вашем вопросе.
чтобы сбросить этот «кэшированный объект», выполните следующие действия (которые вы можете получить по ссылке выше):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.edit().clear(); PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
источник
на случай, если кто-то захочет повторить общие настройки в KOTLIN
sharedPreferences?.all?.forEach { //access key using it.key & value using it.value Log.d("Preferences values",it.key() + ": " + it.value() }
источник