SharedPreferences.getBoolean抛出荒谬的异常

时间:2012-04-11 05:48:02

标签: java android sharedpreferences

我在android中遇到了一个非常令人沮丧的问题,使用了SharedPreference.getBoolean。请参阅以下代码段:

Map<String, ?> all = preferences.getAll();

Object x = all.get("EnableMedia");

boolean v = preferences.getBoolean("EnableMedia", (Boolean) null);

我可以在调试器中看到&#39; x&#39;是一个布尔值,它是真的。

然而,如果我执行下一行preferences.getBoolean,它会抛出异常。是什么给了什么?!

1 个答案:

答案 0 :(得分:4)

看看这个电话:

preferences.getBoolean("EnableMedia", (Boolean) null);

现在查看getBoolean的签名:

public abstract boolean getBoolean (String key, boolean defValue)

请注意,它是boolean值,而不是Boolean值。所以实际发生的是你的代码是这样的:

Boolean tmp = null;
preferences.getBoolean("EnableMedia", tmp.booleanValue());

当你在空引用上调用方法时,这将抛出NullPointerException

您需要传入有效的boolean值,例如

preferences.getBoolean("EnableMedia", true);