android.os.NetworkOnMainThreadException 异常处理
2015-07-15 00:00
706 查看
摘要: 在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,在4.0中,访问网络不能在主程序中进行,有三个方法可以解决,
第一种在主程序中增加:
第二种采用异步方式:
第三种采用线程的方式(与第二种类似 都是异步的方式)
第一种在主程序中增加:
//安卓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(); } };
相关文章推荐
- 9个常见的Android开发错误及解决办法
- android 分享空间微博等等
- Android Studio SVN
- Android 快速开发系列 打造万能的ListView GridView 适配器
- Android Proguard 代码混淆总结
- 创建Android项目及常见错误解决
- android alertDialog
- Android Studio Gradle编译时『No resource found that matches the given name』解决方法(windows系统的坑)
- 用gradle编译任意结构的Android项目
- 用gradle编译任意结构的Android项目
- Android Studio Gradle编译时『No resource found that matches the given name』解决方法(windows系统)
- Android L中的RecyclerView 、CardView 、Palette的使用
- Android依赖注入: Dagger (Part 2)
- Android 平台camera相关梳理
- Android之——多线程下载示例
- 关于Android sdkmanager目录结构的总结
- Android 语音遥控器的整体分析-HAL层的AudioFlinger
- android入门学习-java数据类型和运算符
- Android突击:Fragment
- Android:Layout_weight的深刻理解