Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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.lang.NullPointerException:尝试调用虚拟方法'';“在空对象引用上”;我的意思是,我如何解决它?_Java_Android_Debugging_Nullpointerexception - Fatal编程技术网

什么是;java.lang.NullPointerException:尝试调用虚拟方法'';“在空对象引用上”;我的意思是,我如何解决它?

什么是;java.lang.NullPointerException:尝试调用虚拟方法'';“在空对象引用上”;我的意思是,我如何解决它?,java,android,debugging,nullpointerexception,Java,Android,Debugging,Nullpointerexception,我得到了标题中描述的NullPointerException,但我不明白如何使用错误消息中的信息来调试它。我如何知道什么是空值,以及导致空值的常见原因是什么 如果您看到类似java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“…”之类的错误,此问题旨在帮助解决您的问题 这也适用于以下所有类似错误: java.lang.NullPointerException:尝试对空对象引用调用接口方法“…” java.lang.NullPointerExceptio

我得到了标题中描述的
NullPointerException
,但我不明白如何使用错误消息中的信息来调试它。我如何知道什么是空值,以及导致空值的常见原因是什么


如果您看到类似
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“…”之类的错误,此问题旨在帮助解决您的问题

这也适用于以下所有类似错误:

  • java.lang.NullPointerException:尝试对空对象引用调用接口方法“…”
  • java.lang.NullPointerException:尝试读取空对象引用上的字段“…”
  • java.lang.NullPointerException:尝试从空数组读取
  • java.lang.NullPointerException:尝试获取空数组的长度

注意:这是一个规范的自我回答问题,旨在提供一个单一的位置,指出许多用户对Android上包含Android特定建议的
NullPointerException
s有疑问。

有关此问题的非Android Java版本,或有关更多信息,请参阅

什么是NullPointerException? 首先,如果您不明白什么是
null
,或者
NullPointerException
是什么意思,请查看。这个答案的其余部分将假设你读过那篇文章

如何调查原因 现在您已经了解了基本知识,您需要找出错误所在的行。请参阅,以获取有关如何执行此操作的信息

一旦您知道错误在哪一行,接下来需要做的就是弄清楚哪个变量是空的。错误消息将帮助您解决此问题

如果您的错误看起来像(第一个
可能是
虚拟的
接口
-哪一个并不重要):

这意味着您试图调用
someMethod
package.name.SomeClass
类型的变量是
null
。它还将列出方法的参数类型(如果有),其中示例中有
(…)

因此,如果您有以下代码:

MyClass myVariable=new MyClass();
String logMessage=“其他文本:”+myVariable.toString()+someOtherVariable.method();
您将收到以下错误消息:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.mypackagename.MyClass.toString()' on a null object reference
您知道
myVariable
为null,因为它是
MyClass
类型中唯一调用了
toString()
的变量。
java.lang.String
仅仅意味着
toString()
返回一个
字符串

如果错误是
尝试从字段读取…
,则应用上述建议,但查找字段引用(
MyClass.someProperty
),而不是调用方法(
MyClass.someMethod()

如果错误为“尝试从空数组读取”
,请在该行中查找按索引从数组读取的任何内容(例如,
someArrayVariable[i]

如果错误是
尝试获取空数组的长度
,请查找对数组变量的
.length
调用

常见的根本原因和解决办法 在Activity/Fragment中设置视图之前先查找视图ID 一个常见的问题是在实际设置视图之前调用findViewById。例如,在成员变量声明中调用它:

公共类MyActivity扩展活动{
私有按钮submitButton=findViewById(R.id.submitButton);
//…活动代码的其余部分。。。
}
或在setContentView之前:

公共类MyActivity扩展活动{
私人按钮提交按钮;
创建时的公共void(Bundle savedInstanceState){
submitButton=findViewById(R.id.submitButton);
setContentView(R.layout.activity_main);
}
//…活动代码的其余部分。。。
}
这不起作用,因为在
onCreate
方法(对于
Activity
)或onCreateView(对于
Fragment
)中调用
setContentView
之前执行
findViewById
)。要解决此问题,请确保在
setContentView
之后调用它。对于
Fragment
s,您可以将代码放入
onViewCreated
,或者确保在从
LayoutInflater.flate调用返回的
视图中调用它

布局ID不正确/视图ID/视图不在布局中
问题是,在给定的布局中,有时没有ID传递给findViewById的视图。仔细检查以确保您的
setContentView
LayoutInflater.inflate
调用具有正确的布局ID(与XML文件名匹配),并且在该布局XML文件中存在具有该ID的视图(或其
s的视图)。

@Marqueisoflorne我可以尝试说服您这是一个不同的问题吗?你建议的副本,我在我的问题和答案中都链接了它,它很好地解释了
NullPointerException
s的一般原则。但是,它没有解释如何使用特定于Android的错误消息来确定哪个变量确切地为
null
。我已经在评论中多次向那些抱怨canonical没有帮助他们的人解释了这一点,并且写了这个问题/答案来解释如何做到这一点,这样人们就不必在几十篇单独的帖子上解释了。我想我的回答也解释了这个问题的含义:这是第一步,我的其余答案建立在这个问题及其答案的基础上,添加了关于如何使用Android错误消息的详细信息。此外,它还解释了常见的安卓特定原因:这些原因都不是inc
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.mypackagename.MyClass.toString()' on a null object reference