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

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

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

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


我可以在调试器中看到“ x”是布尔值,它是真的。

但是,如果我执行下一行preferences.getBoolean,它将引发异常。是什么赋予了?!

最佳答案

看一下这个电话:

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);

10-07 12:03