【问题标题】:How to get object type of preference in Android?如何在 Android 中获取对象类型的偏好?
【发布时间】:2015-11-02 13:20:42
【问题描述】:

我可以通过以下方式从共享首选项中获取String

sharedPreferences.getString("key_name","default value");

但是我如何检查key_name 是否真的是String

如果是布尔键值怎么办?

有没有我们可以使用的方法:

if(sharedPreferences.isTypeOf(Boolean,"key_name")) {}

【问题讨论】:

  • 不是 SDK 的一部分。假设您提前知道SharedPreferences 值的数据类型。
  • @CommonsWare 可以使用返回Map<String, ?>getAll(),然后使用instanceof 来测试类型。虽然没有任何意义
  • @Blackbelt:我想。不过,这感觉就像是“用别克拍苍蝇”之类的解决方案。 :-)
  • 确实有这种感觉@CommonsWare

标签: android sharedpreferences preferences object-type


【解决方案1】:

如果你知道你会得到一个布尔值,你可以使用

sharedPreferences.getBoolean("key_name",true);

否则你可以这样做(未经测试,基于doc

Map<String, ?> all = sharedPreferences.getAll();
if(all.get("key_name") instanceof String) {
    //Do something
}
else if(all.get("key_name") instanceof Boolean) {
    //Do something else
}

但是你应该知道你在SharedPrefrences中存储了什么

【讨论】:

  • 你可能想检查 kotlin 版本this
【解决方案2】:

您应该知道 SharedPreference 值的数据类型。

您放置的所有共享偏好都插入到地图中。 地图不能有包含不同值的重复键。当您使用 put 操作时,如果它们的键已经存在于地图中,它基本上会覆盖与键关联的值。 您可以在这里找到 Map "put" 方法的工作原理 - Java Map

因此,按照@Maloubobola 的建议检查两个(或多个)数据类型的 instanceof 有点荒谬,因为键只能是一个值,而该值只能是一种数据类型(你应该知道:P) . 你可以这样做,但就像@Blackbelt 评论的那样没有意义。

一切顺利:)

【讨论】:

    【解决方案3】:

    如果你期望一个字符串,你也可以使用 try/catch 子句:

    try {
        String strValue = sharedPreferences.getString("key_name","default value")
        actionIfString();
    } catch (ClassCastException e) {
        actionIfNotString();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 2014-06-16
      • 2013-01-09
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多