Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences.getBoolean引发异常_Java_Android_Sharedpreferences - Fatal编程技术网

Java SharedReferences.getBoolean引发异常

Java SharedReferences.getBoolean引发异常,java,android,sharedpreferences,Java,Android,Sharedpreferences,android中的SharedReference.getBoolean有一个非常令人沮丧的问题。请参见以下代码段: Map<String, ?> all = preferences.getAll(); Object x = all.get("EnableMedia"); boolean v = preferences.getBoolean("EnableMedia", (Boolean) null); Map all=preferences.getAll(); 对象x=all.

android中的SharedReference.getBoolean有一个非常令人沮丧的问题。请参见以下代码段:

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

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

boolean v = preferences.getBoolean("EnableMedia", (Boolean) null);
Map all=preferences.getAll();
对象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

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

preferences.getBoolean("EnableMedia", true);
看看这个电话:

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

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

preferences.getBoolean("EnableMedia", true);

很难不看到例外就知道。。。请阅读您无法将基元类型(布尔值)设置为空。如果不看到异常,很难知道。。。请阅读您不能将基元类型(布尔值)设置为Null您当然是对的。这就解决了这个问题。然而,在我看来,这门课还是彻底失败了。它总是返回我传递给defValue的值,即使映射中有一个明显不同的条目。我在映射图中也看到了整数的相同行为。@dsharlet:鉴于你之前对一个完全合理的异常的分析是“荒谬的”,我不太相信你的诊断意识。如果调用
contains
,会发生什么?仅供参考,该布尔类型转换是由Eclipse自动生成的,所以我不会说这是一个离题的问题。无论如何,我想我已经解决了这个问题。谢谢您的帮助。@dsharlet:但只有在您尝试传入null之后?我无法想象它本身会暗示一个空值。(下次,请给出您从一开始就得到的异常的详细信息。)好吧,在这个话题上,我感到如此沮丧的部分原因是,很难真正看到Eclipse中抛出了哪些异常以及从何处抛出异常。如果Eclipse的行为更像visualstudio/C++,我可能已经能够弄清楚在这种情况下发生了什么,在这里您可以在抛出异常的位置而不是捕获异常的位置进行中断。“Java异常断点”功能似乎也不起作用(总是在调用堆栈的底部中断)。当然,您是对的。这就解决了这个问题。然而,在我看来,这门课还是彻底失败了。它总是返回我传递给defValue的值,即使映射中有一个明显不同的条目。我在映射图中也看到了整数的相同行为。@dsharlet:鉴于你之前对一个完全合理的异常的分析是“荒谬的”,我不太相信你的诊断意识。如果调用
contains
,会发生什么?仅供参考,该布尔类型转换是由Eclipse自动生成的,所以我不会说这是一个离题的问题。无论如何,我想我已经解决了这个问题。谢谢您的帮助。@dsharlet:但只有在您尝试传入null之后?我无法想象它本身会暗示一个空值。(下次,请给出您从一开始就得到的异常的详细信息。)好吧,在这个话题上,我感到如此沮丧的部分原因是,很难真正看到Eclipse中抛出了哪些异常以及从何处抛出异常。如果Eclipse的行为更像visualstudio/C++,我可能已经能够弄清楚在这种情况下发生了什么,在这里您可以在抛出异常的位置而不是捕获异常的位置进行中断。“Java异常断点”功能似乎也不起作用(总是在调用堆栈的底部中断)。