try catch块中的空指针异常

时间:2014-01-22 16:25:50

标签: java android nullpointerexception

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

  

E FATAL EXCEPTION:MonitoringThread 13533 AndroidRuntime E   过程:foo.com,PID:13533 13533 AndroidRuntime E.   java.lang.NullPointerException 13533 AndroidRuntime E at   foo.com $ MonitoringThread.run(foo.java:125)13533
  java.lang.Thread.run(Thread.java:841)中的AndroidRuntime E

违规行是

ret = mConnection.getInputStream().read(buffer);

在以下代码段中

try {
    ret = mConnection.getInputStream().read(buffer);
    } catch (IOException e) {
    break;
    }

有人可以建议尝试调试的后续步骤吗? 我认为使用try catch块会消除任何空指针错误。

4 个答案:

答案 0 :(得分:3)

您不应该使用try / catch块来消除空指针异常。应该传递空指针异常,让程序员知道问题出现以及在哪里。

在您的情况下,您正在捕获IOException,因此它不是NullPointerException。

还要检查导致此异常的null是什么,也许是mConnection?或getInputStream()返回null。

从这个例子中,您还可以看到最好不要在一行中执行大量方法:

ret = mConnection.getInputStream().read(buffer);

写得更好:

InputStream is = mConnection.getInputStream();
ret = is.read(buffer);

这样你就会从NPE起源的callstack中知道,

如果您的代码不安全,就像您知道可以通过某种方法获得nullpointer,那么只需检查它:

InputStream is=null;
if ( mConnection != null ) {
   is = mConnection.getInputStream();
   if ( is != null ) {
     ret = is.read(buffer);
   }
   else {
      // log error?
   }
} 
else {
   // log error?
}

答案 1 :(得分:1)

try {
    ret = mConnection.getInputStream().read(buffer);
    } catch (Exception e) {

     Log.e("your app", e.toString());
     break;
    }

应解决问题

答案 2 :(得分:0)

有几种可能性。 mConnectionnullgetInputStream()返回nullbuffernullread()方法投放NPE。我最好的猜测是mConnectionnull,这就是我开始的地方。

答案 3 :(得分:0)

try {
    ret = mConnection.getInputStream().read(buffer);
    } catch (IOException e) {
    break;
    }
  

break ret = mConnection.getInputStream()。read(buffer);这句话

 try 
 {

   if(mConnection!=null)
   {
     InputStream reader=mConnection.getInputStream();
     if(reader!=null)ret= reader.read(buffer);
   }
 } catch (IOException e) 
 {
        break;
 }