收到以下运行时错误,导致我的应用程序在启动时崩溃
E FATAL EXCEPTION: MonitoringThread 13533 AndroidRuntime E
Process: foo.com, PID: 13533 13533 AndroidRuntime E
java.lang.NullPointerException 13533 AndroidRuntime E at
foo.com$MonitoringThread.run(foo.java:125) 13533
AndroidRuntime E at java.lang.Thread.run(Thread.java:841)
冒犯的行是
ret = mConnection.getInputStream().read(buffer);
在以下代码片段中
try {
ret = mConnection.getInputStream().read(buffer);
} catch (IOException e) {
break;
}
有人可以建议尝试调试的下一步吗?
我认为使用try catch块可以消除任何空指针错误.
解决方法:
您不应该使用try / catch块来消除空指针异常.空指针异常应向下传递,以使程序员知道问题出现的位置和位置.
就您而言,您正在捕获IOException,因此它不是NullPointerException.
还要检查导致此异常的null是什么,也许是其mConnection?或getInputStream()返回null.
从此示例中,您还可以看到最好不要在一行中执行很多方法:
ret = mConnection.getInputStream().read(buffer);
最好写:
InputStream is = mConnection.getInputStream();
ret = is.read(buffer);
这样,您将从呼叫堆栈中了解NPE的起源,
如果您的代码不安全,例如您知道可以从某种方法获取nullpointer,则只需对其进行检查:
InputStream is=null;
if ( mConnection != null ) {
is = mConnection.getInputStream();
if ( is != null ) {
ret = is.read(buffer);
}
else {
// log error?
}
}
else {
// log error?
}