Android 如何遍历共享首选项的所有键?
SharedReferences具有方法getAll,但它不返回任何条目,尽管存在一些键:Android 如何遍历共享首选项的所有键?,android,sharedpreferences,Android,Sharedpreferences,SharedReferences具有方法getAll,但它不返回任何条目,尽管存在一些键: PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress"); 返回true Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll(); Map keys=PreferenceManager.g
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
返回true
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
Map keys=PreferenceManager.getDefaultSharedReferences(this.getAll();
返回空映射
怎么了?如何获取所有共享首选项的列表?您可以使用SharedReferences
的方法,获取Map
中的所有值,然后您可以轻松地进行迭代
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " +
entry.getValue().toString());
}
Map keys=prefs.getAll();
for(Map.Entry:keys.entrySet()){
Log.d(“映射值”,entry.getKey()+”:“+
entry.getValue().toString());
}
有关更多信息,请查看
dump()
实现。我认为问题更多地与为什么有关
PreferenceManager.getDefaultSharedPreferences(this).getAll()
返回一个空的/矛盾的映射,而不是如何在标准java映射上迭代。关于这里发生的事情,我们并不十分清楚,但基本上,这似乎是有史以来第一次给我们打电话
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
--这就是启动应用程序时初始化首选项时应该调用的方法--创建某种缓存版本的首选项,这会导致将来对xml首选项文件的更改处理不一致,即导致问题中描述的不匹配
要重置此“缓存实体”,请执行以下步骤(可以从上面的链接中找到):
万一有人想在KOTLIN中重复使用SharedReferences
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}
在Kotlin中非常容易,您可以为您的首选项文件更改文件PREF\uXML
getSharedReferences(“FILE\u PREF\u XML”,Context.MODE\u PRIVATE).all?.forEach{
Log.d(标记“共享pref”(+it.key+”)=“+it.value”)
}
这对我来说不返回任何值:(getAll()
可以返回NULL
值。最好检查键是否为NULL。最好使用entry.getValue()
而不是entry.getValue().toString()
不获取NullPointerException)我需要的解决方案是这个答案和
sharedPreferences?.all?.forEach {
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
}