为什么sharedPreferences.getString可能返回null?

时间:2019-09-05 22:25:29

标签: kotlin sharedpreferences

1)在下面的图片中,我想了解为什么 sharedPreferences.getString()给我键入不匹配的原因,它可能返回null,但 sharedPreferences.getBoolean()和< strong> sharedPreferences.getInt()不会给我输入类型不匹配的警告吗?

2)defValue怎么样?不是主要因为如果找不到 SharedPrefKey.App_LANGUAGE ,它将返回 en 吗?所以它不能返回null,是吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

getString界面中查看SharedPreferences的实现。

@Nullable
String getString(String key, @Nullable String defValue);

该方法本身被标记为@Nullable,这意味着它可以返回null。现在,如果您查看defValue参数,您会注意到它也被标记为@Nullable,这意味着您不必传递默认值。如果您正在寻找的字符串首选项不存在并且没有传递默认值,那么它将返回null。

int getInt(String key, int defValue);
boolean getBoolean(String key, boolean defValue);

如果您查看上面的getIntgetBoolean的实现,则可以告诉您必须传递默认值,因此它永远不会为null。这就是为什么您看到的示例与可空性有所不同的原因。

答案 1 :(得分:1)

  1. 正在调用可以返回String或null的Java代码。对于getBoolean()函数,该值只能为true或false。您不能将null填充到boolean字段中。

  2. 正确,您正在定义一个默认值,以防找不到任何内容。您还可以将null放在第二个参数中,这与没有默认值的情况相同。