我知道导致NetworkOnMainThreadException的原因以及如何修复它,但为了改善开发体验,我希望能够捕获异常并至少记录事件或提醒用户(此时谁还是开发人员)...
奇怪的是,我对这段代码没有任何好运(通过我的TCP套接字发送和接收):
try
{
toServer.println (msg.trim());
resp = fromServer.readLine();
}
catch (android.os.NetworkOnMainThreadException nex)
{ ... do something here ... }
Eclipse完全没有识别出异常,我从Android开发者网站上复制了异常类型 - 我很确定我拼写正确...
是否有一些我不了解的Java(可能)使得这个异常无法捕获?
谢谢, R上。
答案 0 :(得分:5)
是否有一些我不了解的Java(可能)使得这个异常无法捕获?
是的,StrictMode
使其无法捕获。无论哪种方式,您应该 不 捕获此异常。相反,您应该通过将代码包装在AsyncTask
中来正确实现代码。抛出此异常的原因是为了防止您通过阻止UI线程来降低应用程序的速度。
阅读我的博客文章了解更多信息:
答案 1 :(得分:1)
我刚刚在我的eclipse版本上测试了这个,它运行得很好..我想我会检查你使用的是哪个版本的api?看起来像抛出那个异常你需要一个最小的api版本11.否则也许是eclipse应该受到责备?我所知道的是,这段代码是正确的,应该没有任何问题地执行。
答案 2 :(得分:0)
您确定这是您应用中首次使用网络吗?
如果您通常在那时连接到服务器,则应抛出NetworkOnMainThreadException。尝试在尝试之前添加日志语句,看看它是否显示。如果没有,则会提前抛出异常。