[英]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;
}
應該解決這個問題
有幾種可能性。 mConnection
為null
, getInputStream()
返回null
,或者buffer
為null
, read()
方法拋出NPE。 我最好的猜測是mConnection
為null
,這就是我開始的地方。
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.