• Caused by: android.os.NetworkOnMainThreadException错误解决办法


    错误Caused by: android.os.NetworkOnMainThreadException

          :查了下原因上在4.0之后在主线程里面执行Http请求都会报这个错,大概是怕Http请求时间太长造成程序假死的情况吧。

    解决办法有两个思路,分别是:

    第一种方法:直接忽视,强制使用(强烈不推荐,但是修改简单)
    在MainActivity文件的setContentView(R.layout.activity_main)下面加上如下代码

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

    或者
    //详见StrictMode文档
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().
    detectDiskWrites().detectNetwork().penaltyLog().build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().
    detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
    
    
    从 Android 2.3 开始提供了一个新的类 StrictMode,该类可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,
    可以帮助开发者改进程序,使主线程处理 UI 和动画在磁盘读写和网络操作时变得更平滑,避免主线程被阻塞。

    第二种方法:使用Thread、Runnable、Handler (推荐使用)
    在Runnable中做HTTP请求,不用阻塞UI线程~

    public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     this.setContentView(R.layout.share_mblog_view);
     new Thread(runnable).start();
    }
    
    Handler handler = new Handler(){
     @Override
     public void handleMessage(Message msg) {
     super.handleMessage(msg);
     Bundle data = msg.getData();
     String val = data.getString("value");
     Log.i("mylog","请求结果-->" + val);
     }
    }
    
    Runnable runnable = new Runnable(){
     @Override
     public void run() {
     //
     // TODO: http request.
     //
     Message msg = new Message();
     Bundle data = new Bundle();
     data.putString("value","请求结果");
     msg.setData(data);
     handler.sendMessage(msg);
     }
    }
    
  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/4803371.html
Copyright © 2020-2023  润新知