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

时间:2012-02-16 11:27:03

标签: android sharedpreferences

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

PreferenceManager.getDefaultSharedPreferences(this).contains("addNewAddress");

返回true

Map<String, ?> keys=PreferenceManager.getDefaultSharedPreferences(this).getAll();

返回空地图

有什么问题?如何获取所有共享偏好的列表?

4 个答案:

答案 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)
}