Android 如何遍历共享首选项的所有键?

Android 如何遍历共享首选项的所有键?,android,sharedpreferences,Android,Sharedpreferences,SharedReferences具有方法getAll,但它不返回任何条目,尽管存在一些键: PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress"); 返回true Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll(); Map keys=PreferenceManager.g

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

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()             
 }