此问题已在此处找到答案:
什么是nullpointerexception,如何修复它((12个答案)
12个月前关闭。
我要去拿 NullPointerException
在标题中描述,但我不明白如何使用错误消息中的信息来调试它。我如何知道什么是空值,以及导致空值的常见原因是什么?
如果你看到一个错误,比如 java.lang.NullPointerException: Attempt to invoke virtual method '...' on a null object reference
,此问题旨在帮助您解决问题。
这也适用于以下所有类似错误:
java.lang.NullPointerException: Attempt to invoke interface method '...' on a null object reference java.lang.NullPointerException: Attempt to read from field '...' on a null object reference
java.lang.NullPointerException: Attempt to read from null array java.lang.NullPointerException: Attempt to get length of null array
注意:这是一个规范的自我回答问题,旨在提供一个单一的位置来指出许多有问题的用户 NullPointerException
s在android上,包含特定于android的建议。
对于这个问题的非android java版本,或者更多信息,请参阅什么是nullpointerexception,以及如何修复它?
1条答案
按热度按时间busg9geu1#
什么是nullpointerexception?
首先,如果你不明白
null
是,还是什么NullPointerException
意思是,看看什么是nullpointerexception,我该如何修复它?。这个答案的其余部分将假设你读过那篇文章。如何调查原因
现在您已经了解了基本知识,您需要找出错误所在的行。看看什么是堆栈跟踪,以及如何使用它来调试应用程序错误?有关如何做到这一点的信息。
一旦您知道错误在哪一行,接下来需要做的就是弄清楚哪个变量是空的。错误消息将帮助您解决此问题。
如果您的错误看起来像(第一个)
...
可能是virtual
或interface
-不重要的是:这意味着类型为
package.name.SomeClass
你试着打电话给他someMethod
是null
. 它还将列出方法的参数类型(如果有),其中(...)
在示例中。因此,如果您有以下代码:
您将收到以下错误消息:
你知道吗
myVariable
为null,因为这是类型的唯一变量MyClass
那已经toString()
去拜访它。这个java.lang.String
就是这个意思toString()
返回一个String
.如果错误是
Attempt to read from field...
,然后应用上述建议,但要阅读字段参考(MyClass.someProperty
)而不是调用一个方法(MyClass.someMethod()
).如果错误是
Attempt to read from null array
,查找该行中按索引从数组中读取的任何内容(例如,someArrayVariable[i]
).如果错误是
Attempt to get length of null array
,找一个.length
调用数组变量。常见的根本原因和解决办法
在activity/fragment中设置视图之前先查找视图ID
一个常见的问题是在实际设置视图之前调用findviewbyid。例如,在成员变量声明中调用它:
或在setcontentview之前:
这不起作用,因为
findViewById
在调用之前执行setContentView
在你的onCreate
方法(适用于Activity
)或oncreateview(用于Fragment
). 要解决此问题,请确保在之后调用它setContentView
. 对于Fragment
s、 您可以将代码放入onViewCreated
,或确保您在View
从机场回来LayoutInflater.inflate
呼叫布局id不正确/视图id/视图不在布局中
问题是,在给定的布局中,有时没有id传递给findviewbyid的视图。再次检查以确保您的
setContentView
或LayoutInflater.inflate
调用具有正确的布局id(与xml文件名匹配),并且在该布局xml文件中有一个具有该id的视图(或它所包含的视图)<include>
s) 。