Как перебрать все ключи общих предпочтений?
SharedPreferences имеют метод getAll, но он не возвращает никаких записей, несмотря на то, что некоторые ключи существуют:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
возвращает true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
возвращает пустую карту
что не так? Как получить список всех общих предпочтений?
3 ответа:
что вы можете сделать, это использовать
getAll()
методSharedPreferences
и получить все значения вMap<String,?>
и тогда вы можете легко перебирать.Map<String,?> keys = prefs.getAll(); for(Map.Entry<String,?> entry : keys.entrySet()){ Log.d("map values",entry.getKey() + ": " + entry.getValue().toString()); }
для больше вы можете проверить
PrefUtil.java's
dump()
реализация.
Я думаю, что вопрос больше связан с тем, почему
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);