java-尝试捕获块中的空指针异常

收到以下运行时错误,导致我的应用程序在启动时崩溃

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?
}
上一篇:java – 设置bean时的Nullpointerexception


下一篇:java-我怎么知道空指针异常的起源?