2010-10-16 44 views
8

有人可以向我解释为什么Android“Catch”处理程序不会初始化一个Exception对象?当发生错误并且我的代码尝试初始化一个Exception对象时,它始终为NULL。异常总是为空

上述对我来说没有意义,因为异常应该总是初始化Exception对象时期。如果发生错误,它不应该为空。

我对Eclipse的Android IDE/SDK相当新,我相信我没有100%的设置。然而,这种类型的功能在我看来应该始终工作,而不是在安装之后。

+1

你能展示你的代码的相关部分吗?你有什么证据可以用来得出异常为空的结论?你是如何观察这些证据的? – 2010-10-16 16:01:39

+0

嗨,我有以下处理程序设置:catch(Exception ex) { \t System.out.println(“错误:\ n \ n”+ ex.toString()); }当我运行调试时,无论错误是什么,异常始终为NULL ....它从不初始化 – John 2010-10-16 16:26:00

+0

你在catch块中有一个断点,ex是空的吗?我发现很难相信...如果ex为null,那么您的print语句会抛出一个空指针异常,那会发生什么? – 2010-10-16 17:41:22

回答

6

一个可能的原因是,你试图让你的主线程,它(例如SDK级别< 10)正常工作前2.3.3 /蜂窝网络连接,但会被抛出作为

android.os.NetworkOnMainThreadException

因为SDK 10级

检查:http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

的问题是,Eclipse不真正了解这个异常(因为它是有条件地抛出根据不同的SDK水平,使Eclipse的可能无法获得此异常的正确实例,这就解释了为什么您的异常对象始终为NULL)

解决方案:创建单独的线程或使用AsyncTask来执行您的网络连接请求。

+0

如何在没有异常实例的情况下调用异常处理程序?异常处理程序代码必须有效地测试'thrownException instanceof CatchException',并且没有将会失败的异常实例。 – 2012-09-25 23:21:54