关于android主线程不能访问网络异常NetworkOnMainThreadException

最近在弄访问网络的时候,遇到一个问题。
同一个项目,在android2.3手机上没有任何问题,但是在android4.0平板上却出现访问网络异常。
android.os.NetworkOnMainThreadException
             at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
             at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
             ......
后来仔细查了一下,终于发现解决方法了,特此拿出来供大家参考参考。
android.os.NetworkOnMainThreadException是说不要在主线程中访问网络,这个应该是android3.0版本开始就强制不能在主线程中访问网络,要把访问网络放在独立的线程中。在开发中,为了防止访问网络阻塞主线程,一般都要把访问网络放在独立线程中或者异步线程AsyncTask中 。但是由于某些原因,想要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
就可以解决你的问题。另外在类的前面,可能要加上@SuppressLint("NewApi")才行。
在android sdk 2.3以上才有StrictMode类,我在android sdk 2.3.3上编译测试通过。
注:Android 2.3起,新增加了一个新的类,叫StrictMode(android.os.StrictMode), 这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些不规范和不好的代码。
在android sdk 4.0版本上,这个问题可能比较常见,呵呵。
以上是菜鸟遇到的问题,欢迎大家指正。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值