获取以下运行时错误,导致我的应用程序在启动时崩溃
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块会消除任何空指针错误。
答案 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)
有几种可能性。 mConnection
为null
,getInputStream()
返回null
,buffer
为null
,read()
方法投放NPE。我最好的猜测是mConnection
是null
,这就是我开始的地方。
答案 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;
}