天天看点

【Android开发】解决安卓android.os.NetworkOnMainThreadException解决android socket编程出现的Caused by: android.os.NetworkOnMainThreadException错

本文转自:http://blog.csdn.net/debutent/article/details/8708127

以前我的socket通信的代码运行在android2.3.5手机上一点问题没有,现在入手了小米2s(系统android4.1.1)后,发现出现如下问题,期间server端打开后异常关闭,在logcat中查看到了caused by: android.os.networkonmainthreadexception错误,在http://stackoverflow.com/questions/13136539/caused-by-android-os-networkonmainthreadexception找到了答案,要在mainactivity.java的setcontentview(r.layout.activity_main)后加入以下代码

并在文件头加入,import android.os.strictmode

问题解决

对于什么是strictmode,可以参考http://www.cnblogs.com/zelos/archive/2011/02/27/1966403.html

还有一篇文章解释的更清晰:

报android.os.networkonmainthreadexception异常,经过查文档,原来是4.0系统不允许主线程(ui线程)访问网络,因此导致了其异常。在4.0之后在主线程里面执行http请求都会报这个错,也许是怕http请求时间太长造成程序假死的情况吧。

一:在发起http请求的activity里面的oncreate函数里面添加如下代码:

//详见strictmode文档

如果正在做的项目不是android 4.0的是看不到strictmode类的。

二:使用thread、runnable、handler这三个类:

开线程处理关于网络的事物,然后用handler发送消息来处理更新ui。

自己走了不少弯路。

继续阅读