SharedPreferences具有方法getAll,但尽管存在某些键,但它不返回任何条目:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
返回true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
返回空地图
怎么了?如何获取所有共享首选项的列表?
SharedPreferences具有方法getAll,但尽管存在某些键,但它不返回任何条目:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
返回true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
返回空地图
怎么了?如何获取所有共享首选项的列表?
Answers:
您可以做的是使用getAll()of的方法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()
getAll()可以返回NULL值。检查keysNULL会更好。
entry.getValue()而不是entry.getValue().toString()不获取NullPointerException)
我认为问题更多与为什么有关
PreferenceManager.getDefaultSharedPreferences(this).getAll()
返回一个空的/矛盾的映射,而不是如何遍历标准的Java映射。在Android的文档是不是真的晶莹剔透这是怎么回事这里,但基本上这似乎是有史以来第一次调用到
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
-启动应用程序时应该调用它来初始化首选项-创建首选项的某种缓存版本,这会导致以后对xml首选项文件的更改不一致地处理,即,导致不匹配描述您的问题。
要重置此“缓存的实体”,请按照以下步骤操作(您可以从上面的链接中找到相应的步骤):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().clear();
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
以防有人想遍历KOTLIN中的sharedpreferences
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}