【问题标题】:Android check SharedPreferences for value typeAndroid 检查 SharedPreferences 的值类型
【发布时间】:2015-04-13 22:09:04
【问题描述】:

我在SharedPreferences 中有一些键值对,有整数、浮点数、字符串等。有什么方法可以检查给定键是否属于特定类型?

编辑

我研究了文档和可用的方法。可悲的是,在我看来,我需要让它成为一种“肮脏”的方式,只是尝试每个 get 方法,直到我得到与默认设置为参数不同的值。这是我唯一想到的,但不太喜欢它......

【问题讨论】:

  • 您是否在不同点将不同的数据类型存储在同一个键中?标准做法是将每个键定义为静态全局,并且您永远不需要检查它是什么类型,因为每个键应该只包含一种类型的数据。
  • @DanielNugent 我知道,关键是我尝试定义一个方法,它只会获取一个键作为参数,然后根据值类型做一些工作。

标签: android sharedpreferences


【解决方案1】:

您可以遍历 SharedPreferences 中的所有条目并检查数据类型 使用 getClass 函数对每个条目的值进行赋值。

Map<String,?> keys = sharedPreferences.getAll();

for(Map.Entry<String,?> entry : keys.entrySet())
{
  Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
  Log.d("data type", entry.getValue().getClass().toString());

  if ( entry.getValue().getClass().equals(String.class))
    Log.d("data type", "String");
  else if ( entry.getValue().getClass().equals(Integer.class))
    Log.d("data type", "Integer");
  else if ( entry.getValue().getClass().equals(Boolean.class))
    Log.d("data type", "boolean");

}

【讨论】:

  • 会试试这个,看起来像我的想法,但更优雅
  • 有效,感谢您的回答。我终于可以睡觉了,不用再担心了;)
  • getAll() 没有收到条目吗?为什么将变量命名为keys
【解决方案2】:

聚会可能迟到了,但 kotlin 方法可能是:

 fun readPreference(key: String) : Any? {
    val keys = sharedPrefs?.all
    if (keys != null) {
        for (entry in keys) {
            if (entry.key == key) {
                return entry.value
            }
        }
    }
    return null
}

其中 sharedPrefs 之前初始化为:

sharedPrefs = this.applicationContext.getSharedPreferences("userdetails", Context.MODE_PRIVATE)

【讨论】:

    【解决方案3】:

    实际上,如果您查看 SharedPreferences (http://developer.android.com/reference/android/content/SharedPreferences.html) 的文档,您将找不到与您的问题相关的任何内容,因此可能无法完成。或者,您可以使用 contains 方法检查特定键是否存在,但要获取键,您需要使用以下方法指定类型:

    getBoolean(String key, boolean defValue);
    getFloat(String key, float defValue);
    getInt(String key, int defValue);
    ...
    

    【讨论】:

    • 我研究了文档和可用的方法。可悲的是,我似乎需要让它成为一种“肮脏”的方式,只是尝试每个get 方法,直到我得到不同于默认设置为参数的值。这是我唯一想到的,但不太喜欢它......
    • 听起来像是一个肮脏的黑客,也许 SharedPreferences 不是您正在寻找的工具......
    猜你喜欢
    • 2021-11-30
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 2011-03-20
    • 2022-08-18
    相关资源
    最近更新 更多