android.os.NetworkOnMainThreadException

Posted Xiao_野猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android.os.NetworkOnMainThreadException相关的知识,希望对你有一定的参考价值。

 

   在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的主要内容,如果未能解决你的问题,请参考以下文章