码迷,mamicode.com
首页 > 移动开发 > 详细

android.os.NetworkOnMainThreadException

时间:2017-10-14 18:37:19      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:puts   work   定义   set   情况   ext   解决方法   nbsp   错误解决   

 

   在4.0之后谷歌强制要求链接网络不能在主线程进行访问,所在主线程运行就会出现这个错误

技术分享

  解决错误必须要创建一个子线程

new Thread(){public void method1(){
//放入你要链接网络的数据 }}.start();
有了这句话之后,上面那个错误解决了,但是又有新的错误 

技术分享

 因为只有主线程(UI线程)才可以跟新UI(如果不这样,就会造成线程的同步与互斥的某些复杂情况。。。)∴如果在子线程中更新UI会出现错误

 解决方法 :信息机制(handler原理)

1:在主线程中定义一个Handler

技术分享
//主线程中定义一个handler  ,类声明一个之后又加一个大括号{}表示重写这个类的方法
private Handler handler=new Handler(){
    //这个方法是在主线程里面执行的
    @Override
    public void handleMessage(Message msg) {
        //更新你需要的UI
       String content= (String) msg.obj;//获取信息
        tv.setText(content);//跟新UI
    }
};
View Code

 2:子线程里面

技术分享
                        //调用handler的对象告诉系统我们要跟新UI
                        //1:创建一个message对象
                        Message msg=new Message();
                        msg.obj=content;//  String content=StreamTools.tooleadStream(inputStream);
                        handler.sendMessage(msg);
                        //发送一条消息 信息把数据发到msg里面  ,发送完信息之后,主线程定义的handler就立马执行handleMessage()方法
View Code

 

android.os.NetworkOnMainThreadException

标签:puts   work   定义   set   情况   ext   解决方法   nbsp   错误解决   

原文地址:http://www.cnblogs.com/zhu520/p/7667650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!