AndroidRuntime(3129): android.os.NetworkOnMainThreadException

来源:互联网 发布:贝佳斯怎么样 知乎 编辑:程序博客网 时间:2024/04/28 01:37
//安卓2.3以后访问网络增加内容          StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()                      .detectDiskReads()                      .detectDiskWrites()                      .detectNetwork()                      .penaltyLog()                      .build());           StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()                      .detectLeakedSqlLiteObjects()                      .detectLeakedClosableObjects()                      .penaltyLog()                      .penaltyDeath()                      .build());  第二种采用异步方式:private class GeocodeingOnclickListener implements OnClickListener{          @Override          public void onClick(View v) {              new GeocodeingTask().execute();          }      }      private class GeocodeingTask extends AsyncTask<Integer, Integer, Integer>{          @Override          protected Integer doInBackground(Integer... params) {              String url="http://maps.googleapis.com/maps/api/geocode/json?" +                      "latlng=35.95405270,117.30649970&sensor=false";              //创建一个Httpclient对象              HttpClient httpClient=new DefaultHttpClient();              String responseData="";              try {                  //向指定的Http地址发送请求                  HttpResponse httpResponse=httpClient.execute(new HttpPost(url));                  //取得服务器返回的响应                  HttpEntity httpEntity=httpResponse.getEntity();                  BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(httpEntity.getContent()));                  String line="";                  while((line=bufferedReader.readLine())!=null){                      responseData=responseData+line;                  }              } catch (ClientProtocolException e) {                  e.printStackTrace();              } catch (IOException e) {                  e.printStackTrace();              }              Gson gson=new Gson();              TestResult result=gson.fromJson(responseData, TestResult.class);              System.out.println(result.toString());              return null;          }      }  第三种采用线程的方式(与第二种类似 都是异步的方式)     super.onCreate(savedInstanceState);        setContentView(R.layout.main);        // 启动线程执行下载任务        new Thread(downloadRun).start();    }        /**    * 下载线程    */    Runnable downloadRun = new Runnable(){    @Override  public void run() {      // TODO Auto-generated method stub      updateListView();  }    };  

在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,在4.0中,访问网络不能在主程序中进行,有三个方法可以解决,一个是在主程序中增加: 
0 0
原创粉丝点击