【发布时间】:2011-03-26 15:30:55
【问题描述】:
我们有一个 Android 应用程序在 android 2.1 之前运行良好,但是当我们尝试为 android 2.2 发布它时,我们得到一个空指针异常。当我们在以下代码行解析 xml 时会发生这种情况:
((node) getText.item(0).getNodeValue();
感谢您的帮助!
【问题讨论】:
标签: java android nullpointerexception
我们有一个 Android 应用程序在 android 2.1 之前运行良好,但是当我们尝试为 android 2.2 发布它时,我们得到一个空指针异常。当我们在以下代码行解析 xml 时会发生这种情况:
((node) getText.item(0).getNodeValue();
感谢您的帮助!
【问题讨论】:
标签: java android nullpointerexception
NullPointerException 可能会在几种不同的情况下抛出。来自文档:
当应用程序在需要对象的情况下尝试使用
null时抛出。其中包括:
- 调用
null对象的实例方法。- 访问或修改
null对象的字段。- 将
null的长度视为一个数组。- 像数组一样访问或修改
null的槽。- 将
null视为Throwable值。应用程序应抛出此类的实例以指示
null对象的其他非法用途。
与任何异常一样,您应该仔细检查堆栈跟踪,看看是否有任何有用的信息说明它被抛出的原因。如果确实是由非法访问null 引用引起的,就好像它是一个真实的对象一样,那么调试这类问题的一般方法是分解这样的表达式:
// chained method invokations, can be hard to debug
var.method1().method2(arg).method3()
分成多个这样的语句:
// broken into multiple assignments
var1 = var.method1();
var2 = var1.method2();
var3 = var2.method3();
现在,当NullPointerException 出现时,您将知道抛出它的链的确切部分,即var 是null。
识别 where 部分可以快速缩小对 why 的搜索范围。如果var 本身是null,则将其追溯到以前的分配。如果varN 是null,那么查看methodN() 的文档,看看在什么情况下它可以返回null。
如果null 来自容器/可变数据结构上的get-type 操作,那么问题就不再那么精确地定位了,您必须弄清楚对应的set 发生在哪里.如果null 从来都不是这个容器的合法值,那么也许它应该在set 期间执行null-检查:最好早点而不是晚点导致失败,因为错误的来源可以更本地化很容易。
在调试NullPointerException:
关于投掷NullPointerException 的特定于应用程序的行为:
关于其他对学习有指导意义的NullPointerException 场景:
String.valueOf(null) throw a NullPointerException?null == 0 throws NullPointerException in Java?int num = Integer.getInteger("123") throw NullPointerException?null 本身:
【讨论】:
这是一个格式错误的代码。请纠正。然后确保您没有在 null 值上调用任何方法。
【讨论】: