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
  • 相关阅读:
    批量修改文件名
    查看数据库版本及当前登录用户是什么?
    安装mysql5.5时候的报错解决办法:
    mysql.sock的作用
    Linux系统编程15_C函数总结
    Linux系统编程14_信号和进程状态
    Linux系统编程13_CoreDump
    Linux系统编程12_标准库和POSIX标准头文件
    gcc使用
    http长链接短链接
  • 原文地址:https://www.cnblogs.com/zhu520/p/7667650.html
Copyright © 2011-2022 走看看