Android 4.0以上,网络连接在主线程上发生异常,产生android.os.NetworkOnMainThreadException

14 篇文章 0 订阅
4 篇文章 0 订阅

最近在做以http带参数的接口来获取(下发)数据,最初在vivo手机(android7.0)上稍做调试就完美手工。

然而boss希望在平板(华为最新款)上运用这个软件,本以为也就是随意安装下就可以了,却发现运行获取数据时,第一次完美接受,第二次却直接闪退!

当时蒙圈了,然后调试发现,第二次居然没有运行http,直接崩溃。

找到bug所在:

android.os.NetworkOnMainThreadException

问百度,才知道, 在Android4.0以后,会发现,只要是写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(Aplication Not Response)异常,Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
知道症状了,就得下猛药了,作为萌新,我只得一个个尝试了。

1.http改成https

这个条件一般不会实现,https那是需要证书认证、域名备案之后才可以使用的

个人果断pass

2.targetSdkVersion 降到27以下

这个有的说可以用,有的说不可以用,因人而异,不过可以尝试下

个人调试无果

3.创建允许访问http的参数配置

第一步:配置xml

代码:

<?xml version="1.0" encoding="utf-8"?>
<!--Android 9.0 https请求适配-->
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

第二步:在APP的AndroidManifest.xml文件下的application标签增加属性

代码:

android:networkSecurityConfig="@xml/network_security_config"

这个有人说可以用,可能是我个人的程序逻辑问题,还是不能解决,所以继续...

4.创建新的线程

1.使用单独线程进行网络操作,将结果进行回传:

new Thread(new Runnable() 
{               
	@Override              
	public void run() {                   
		Message m = new Message();                   
		m.what = 0;  		
		m.obj=//你的网络操作                 
		handler.sendMessage(m);                            
		}       
	}
}

2.获取网络操作结果:

 handler = new Handler() {  
            public void handleMessage(Message msg) {  
                super.handleMessage(msg);  
                if (msg.what == 0) {  
                    //获取你的消息;
                } else if (msg.what == 1) {  
                      
                } 
            }  
        };  

额...这个我的http本身就有线程,所以这个对我个人没作用

5.AsyncTask的用法

这个我个人没尝试,大家可以去尝试下,据说用过的效果还是蛮不错的

这是大神写的:https://www.cnblogs.com/dawei/archive/2011/04/18/2019903.html#2824345

6.Activity的onCreate()方法中加入这样一段代码,我个人成功了!!

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

如果还有别的方法,请不要吝啬您的劳动成果,分享他人,岂不美哉?

欢迎在下方留言哈!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软硬兼施虾米

你的打赏就是我前进更新的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值