SharedPreferences有方法getAll,但它不返回任何条目,尽管存在一些键:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
返回true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
返回空地图
有什么问题?如何获取所有共享偏好的列表?
答案 0 :(得分:172)
您可以使用SharedPreferences
的{{3}}方法获取Map<String,?>
中的所有值,然后您就可以轻松迭代。
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " +
entry.getValue().toString());
}
有关详情,您可以查看getAll()
dump()
实施情况。
答案 1 :(得分:7)
我认为问题更多与
有关 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);
答案 2 :(得分:3)
任何人都希望在KOTLIN中迭代共享偏好
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}
答案 3 :(得分:0)
在 Kotlin 中非常容易,您可以为您的首选项文件更改 FILE_PREF_XML
getSharedPreferences("FILE_PREF_XML", Context.MODE_PRIVATE).all?.forEach {
Log.d(TAG,"shared pref(" + it.key + ") = " + it.value)
}