2

我知道导致 NetworkOnMainThreadException 的原因以及如何修复它,但为了改善开发体验,我希望能够捕获异常并至少记录事件或提醒用户(谁仍然此时的开发人员)...

奇怪的是,我对这段代码没有任何运气(它通过我的 TCP 套接字发送和接收):

try
{
    toServer.println (msg.trim());
    resp = fromServer.readLine();
}
catch (android.os.NetworkOnMainThreadException nex)
{ ... do something here ... }

Eclipse 根本无法识别该异常,我从 Android 开发者网站复制粘贴了异常类型——我很确定我拼写正确...

关于Java(也许)有什么我不知道的东西使这个异常无法捕获吗?

谢谢,R。

4

3 回答 3

5

关于Java(也许)有什么我不知道的东西使这个异常无法捕获吗?

是的,StrictMode让它无法捕捉。不管怎样,你都不应该捕捉到这个异常。相反,您应该通过将代码包装在AsyncTask. 抛出此异常的原因是为了防止您通过阻塞 UI 线程来减慢应用程序的速度。

阅读我的博客文章了解更多信息:

为什么冰淇淋三明治会使您的应用程序崩溃

于 2012-07-31T21:16:12.903 回答
1

好吧,我刚刚在我的 eclipse 版本上测试了它,它工作得很好。我想我会检查你使用的是哪个版本的 api?看起来像抛出那个异常你需要一个最低的 api 版本 11。否则也许 eclipse 是罪魁祸首?我所知道的是这段代码是正确的,应该可以毫无问题地执行。

于 2012-07-31T20:58:28.220 回答
0

您确定这是您的应用程序中首次使用网络吗?

如果您通常在那个时候连接到服务器,则应该抛出 NetworkOnMainThreadException。尝试在尝试之前添加一条日志语句,看看它是否出现。如果不是,则更早抛出异常。

于 2012-07-31T20:48:03.257 回答