zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C++类继承内存布局(二)
    C++类继承内存布局(一)
    排序算法
    python 文件路径问题
    python map对象
    python reduce() 函数
    python eval 用法
    PyCharm引入自定义类报错
    Python中的lambda的简单介绍
    python time模块和datetime模块
  • 原文地址:https://www.cnblogs.com/zhu520/p/7667650.html
Copyright © 2011-2022 走看看