如何遍历共享偏好的所有键?
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);