如何遍历共享偏好的所有键?
Posted
技术标签:
【中文标题】如何遍历共享偏好的所有键?【英文标题】:How to iterate through all keys of shared preferences? 【发布时间】:2012-03-07 19:17:31 【问题描述】:SharedPreferences 具有 getAll 方法,但尽管存在某些键,但它不返回任何条目:
PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");
返回真
Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();
返回空地图
怎么了?如何获取所有共享偏好的列表?
【问题讨论】:
【参考方案1】:你可以做的是使用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()
实现。
【讨论】:
这对我没有返回值:(getAll()
可以返回 NULL
值。最好检查 keys
是否为 NULL。
最好使用entry.getValue()
而不是entry.getValue().toString()
来避免出现NullPointerException)【参考方案2】:
我认为这个问题更多地与为什么
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);
【讨论】:
我需要的解决方案是结合这个答案和***.com/a/9310697/1815624【参考方案3】:如果有人想遍历 KOTLIN 中的共享首选项
sharedPreferences?.all?.forEach
//access key using it.key & value using it.value
Log.d("Preferences values",it.key() + ": " + it.value()
【讨论】:
【参考方案4】:在 Kotlin 中非常简单,您可以更改 FILE_PREF_XML 为您的首选项文件
getSharedPreferences("FILE_PREF_XML", Context.MODE_PRIVATE).all?.forEach
Log.d(TAG,"shared pref(" + it.key + ") = " + it.value)
【讨论】:
以上是关于如何遍历共享偏好的所有键?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用objective-c在xcode中使用共享偏好? [复制]