簡體   English   中英

try catch塊中的空指針異常

[英]Null Pointer exception within a try catch block

獲得以下運行時錯誤,導致我的應用程序在啟動時崩潰

E致命異常: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中的AndroidRuntime E(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起源的callstack那里知道,

如果您的代碼不安全,就像您知道可以通過某種方法獲得nullpointer,那么只需檢查它:

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

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

應該解決這個問題

有幾種可能性。 mConnectionnullgetInputStream()返回null ,或者buffernullread()方法拋出NPE。 我最好的猜測是mConnectionnull ,這就是我開始的地方。

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;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM