在Android 4.0以上,网络连接不能放在主线程上,否则报错android.os.NetworkOnMainThreadException。但是4.0下版本可以不会报错。

官方解释

在Android4.0以后,写在主线程(就是Activity)中的HTTP请求,运行时都会报错,这是因为Android在4.0以后为了防止应用的ANR(Aplication Not Response)异常,Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。

解决方案

1、在Activity的onCreate()方法中加入代码

适用于网络请求数据量很小

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

2、启动子线程进行网络请求(推荐使用)

    new Thread(new Runnable(){
        @Override
        public void run() {
           //请求详情
        }).start();
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐