如何遍历共享偏好的所有键?

SharedPreferences具有方法getAll,但它不返回任何条目,尽pipe有些键存在:

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

返回true

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

返回空地图

哪里不对? 如何获得所有共享偏好的列表?

你可以做的是使用SharedPreferences getAll()方法,并获取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地图。 Android的文档是不是真的很清楚这里发生了什么,但基本上,这似乎是第一次打电话

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

– 这是你应该调用来初始化首选项,当你启动你的应用程序 – 创build某种types的caching版本的首选项,这会导致未来更改您的xml首选项文件不一致处理,即导致不匹配在你的问题中描述。

要重置这个“caching实体”,请按照以下步骤(您可以从上面的链接中得出):

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.edit().clear(); PreferenceManager.setDefaultValues(this, R.xml.preferences, true);