搜索
热搜: 活动 交友 discuz
查看: 3502|回复: 0
打印 上一主题 下一主题

android.os.NetworkOnMainThreadException 异常处理

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-1-10 11:59:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,在4.0中,访问网络不能在主程序中进行,有三个方法可以解决,一个是在主程序中增加:
Java代码  [url=][/url]

  • //安卓2.3以后访问网络增加内容  
  •         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
  •                     .detectDiskReads()  
  •                     .detectDiskWrites()  
  •                     .detectNetwork()  
  •                     .penaltyLog()  
  •                     .build());   
  •         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
  •                     .detectLeakedSqlLiteObjects()  
  •                     .detectLeakedClosableObjects()  
  •                     .penaltyLog()  
  •                     .penaltyDeath()  
  •                     .build());  


第二种采用异步方式:
Java代码  [url=][/url]

  • 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;  
  •         }  
  •     }  


第三种采用线程的方式(与第二种类似 都是异步的方式)
Java代码  [url=][/url]

  •       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();  
  • }  
  •   };  


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-19 11:54 , Processed in 0.065869 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表