Как перебрать все ключи общих настроек? - PullRequest
75 голосов
/ 16 февраля 2012

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

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

возвращает true

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

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

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

Ответы [ 3 ]

173 голосов
/ 16 февраля 2012

Что вы можете сделать, это использовать 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() реализация.

8 голосов
/ 14 февраля 2013

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

    PreferenceManager.getDefaultSharedPreferences(this).getAll()

возвращает пустую / противоречивую карту, чем с тем, как перебирать стандартную карту Java. android doc не совсем ясно о том, что здесь происходит, но в основном это похоже на первый звонок в истории на

    PreferenceManager.setDefaultValues(this, R.xml.preferences,false)

- это то, что вывы должны вызывать для инициализации предпочтений при запуске вашего приложения - создает некую кешированную версию ваших предпочтений, что приводит к несогласованной обработке будущих изменений в вашем файле настроек XML, т. е. к несоответствию, которое вы описали в своем вопросе.

, чтобы сбросить эту «кэшированную сущность», выполните следующие действия (которые вы можете найти по приведенной выше ссылке):

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    prefs.edit().clear();
    PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
3 голосов
/ 11 апреля 2018

, если кто-то хочет перебрать общие предпочтения в KOTLIN

 sharedPreferences?.all?.forEach {
     //access key using it.key & value using it.value
     Log.d("Preferences values",it.key() + ": " + it.value()             
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...