【问题标题】: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();

返回空地图

怎么了?如何获取所有共享偏好的列表?

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    你可以做的是使用SharedPreferencesgetAll()方法,并获取Map&lt;String,?&gt;中的所有值,然后你就可以轻松地遍历了。

    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);
    

    【讨论】:

    【解决方案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)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-06
        • 2014-07-29
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多