如何在 Android 中获取偏好的对象类型?

How to get object type of preference in Android?

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

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

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

如果是布尔键值怎么办?

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

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

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

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

中存储了什么

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

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

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

祝一切顺利:)

如果您需要一个字符串,您还可以使用 try/catch 子句:

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