Как перебрать все ключи общих предпочтений?


SharedPreferences имеют метод getAll, но он не возвращает никаких записей, несмотря на то, что некоторые ключи существуют:

PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");

возвращает true

Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();

возвращает пустую карту

что не так? Как получить список всех общих предпочтений?

3 73

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'sdump() реализация.

Я думаю, что вопрос больше связан с тем, почему

    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);

если кто-то хочет перебрать sharedpreferences в KOTLIN

 sharedPreferences?.all?.forEach {
     //access key using it.key & value using it.value
     Log.d("Preferences values",it.key() + ": " + it.value()             
 }