//http get
     try{
          HttpClient httpclient = new DefaultHttpClient();
          HttpGet httpget = new HttpGet("http://192.168.1.144/plus/taomei02/items_list2.php?action=android");
          HttpResponse response = httpclient.execute(httpget);
          HttpEntity entity = response.getEntity();
          is = entity.getContent();
     }catch(Exception e){
          Log.e("log_tag", "Error in http connection"+e.toString());
     }
提示错误:E/log_tag(5487): Error in http connectionandroid.os.NetworkOnMainThreadException是不是系统不允许在主线程执行网络请求,那该怎么解决呢

解决方案 »

  1.   

    4.0以后都不允许在UI主线程执行网络请求,因为会导致UI反应慢或者更严重的ANR,影响用户体验。
    你可以在一个新线程中做网络操作。
            (new Thread() {            @Override
                public void run() {
                    // 这里做网络操作
                }        }).start();
      

  2.   

    楼上正解,另外还有一种办法:
    在程序启动后加入以下代码 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads()
                    .detectDiskWrites()
                    .detectNetwork()  
                    .penaltyLog()
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .penaltyLog()
                    .penaltyDeath()
                    .build());       
      

  3.   


    StrictMode可以用来监视哪些费时操作放在了UI主线程(flash I/O,network I/O等),在release版本中应该去掉相应的代码
      

  4.   


    StrictMode可以用来监视哪些费时操作放在了UI主线程(flash I/O,network I/O等),在release版本中应该去掉相应的代码恩,是的,耗时操作都应该放在子线程中才是对的