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

今天在学习的过程中遇到了NetworkOnMainThread的异常,关于这个异常问题在android sdk 4.0版本上,这个问题可能比较常见,查了许些资料大多都是大概讲解原因,但是没有讲解到具体的解决方法,下面将我写的程序的时候的解决方法记录如下:

首先看看LogCat的异常信息:


异常的原因:在android3.0版本开始就强制不能在主线程中访问网络,要把访问网络放在独立的线程中。在开发中,为了防止访问网络阻塞主线程,一般都要把访问网络放在独立线程中或者异步线程AsyncTask中

也就是说解决NetworkOnMainThread异常有两种方案:

第一种:重新开一个线程。

第二种:忽略这些强制策略

而在我是在学习的过程中,没有那么限制需要考虑就采用了第二种解决方案,忽略这些强制策略问题,要忽略策略问题可以在onCreate()方法里面加上

StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

同事在类的上面加上@SuppressLint("NewApi"),这样问题就解决了,程序也能够顺利通过运行。

在上面解决方案中提到了StrictMode类,这个类是在android sdk 2.3以上才有StrictMode类。说到这里那么我来简要说明下StrictMode类:

StrictMode类是在Android 2.3提供一个称为严苛模式(StrictMode)的调试特性。那它都做什么呢?它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policy violation),你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。可以强制用警告代替崩溃(crash),也可以仅将警告计入日志,让你的应用继续执行,就像我的程序解决方案就是强制忽略策略,强制执行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值