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

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

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

Возвращает true

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

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

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

Solutions Collecting From Web of "Как перебирать все ключи общих настроек?"

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

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

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