android笔记-访问网络出现NetworkOnMainThreadException

在android开发过程中,网络问题是避免不了的,NetworkOnMainThreadException 是我们常见问题,以上是怎么解决问题

#情景重现#

button.setOnClickListener(){
       (new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               try{
                       String url = "http://www.baidu.com";
                        String json  = get(url,""utf-8);
                        System.out.println("----------获取json:-----------"+json);}
                              }catch (Exception e) {
                e.printStackTrace();
            }

            }
}
// 链接服务器
public static String get(String urlStr, String charsetName) throws Exception {               
              // 创建URL对象
              URL url = new URL(urlStr);
              // 打开链接
              HttpURLConnection conn = (HttpURLConnection) url.openConnection();
             // 请求方式
            conn.setRequestMethod(METHOD_GET);
             //设置信息头属性
            conn.setRequestProperty("User-Agent","iss");
            // 超时时间
           conn.setConnectTimeout(30000);

           String result = "";
           if (conn.getResponseCode() == 200) {
            InputStream inputStream = conn.getInputStream();
            byte[] data = StreamUtil.readByteArray(inputStream);
            result = new String(data, charsetName);
        }

        System.out.println("-----------------get------------------");
        return result;
    }

这样运行的话,是访问不了网络的。结果:出现

android.os.NetworkOnMainThreadException

**错误提示的原因,不会停止运行,但是访问不了网络

android笔记-访问网络出现NetworkOnMainThreadException_第1张图片
Paste_Image.png

**原因:不允许在主线程中进行网络访问


**解决的一种方法:利用异步加载类AsyncTask类

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              PersonTask task = new PersonTask();
                task.execute();
            }
        });


  public class PersonTask extends AsyncTask> {

        @Override
        protected ArrayList doInBackground(Void... params) {

            try {
                String url = "http://www.baidu.com";
                String json = get(url,""utf-8);
                System.out.println("---------------HttpUtil------------------");
                System.out.println("查询结果。。。。。。" + json);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

**
**运行结果:

android笔记-访问网络出现NetworkOnMainThreadException_第2张图片
运行结果.png

成功获取到数据!!!

你可能感兴趣的:(android笔记-访问网络出现NetworkOnMainThreadException)