android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理
来源:互联网 发布:mac airplay显示器关闭 编辑:程序博客网 时间:2024/06/09 23:31
在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,在4.0及以上版本中,访问网络不能在主程序中进行,UI与网络的数据交换,要放到线程里,防止UI线程因为数据加载造成阻塞,可以用asynctask或thread或handler三个方法可以解决,一个是在主程序中增加:
- //安卓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();
- }
- };
0 0
- android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- 异常处理-android.os.NetworkOnMainThreadException
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- Android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException 异常处理
- android.os.NetworkOnMainThreadException异常处理
- java通过JDBC链接SQLServer2012
- Hibernate的一对多增改级联操作
- 算法的时间复杂度
- iOS_UIImage中 + imageNamed: 和 + imageWithContentsOfFile:两个方法的区别
- poj 3264 -Balanced Lineup (RMQ与线段树两种做法)
- android调用httpclient.excute报android.os.NetworkOnMainThreadException 异常处理
- 简单八叉树源码剖析
- 排序算法整理
- 组合数学+递推式 hdu2068 RPG的错排
- HDU-3342 Legal or Not(拓扑排序)
- HAVOK只碰撞一个shape的一面
- poj-2367 Genealogical tree
- 进程间通信的方式
- list3