安卓3.0之后的网络访问问题

在Activity中使用如下web请求

[java] view plain copy
  1. String url = "http://maps.google.com/maps/api/directions/xml?origin=22.592700,113.969100" +     
  2.     "&destination=23.046604,113.397510&sensor=false&mode=walking";     
  3.        
  4.   HttpGet get = new HttpGet(url);     
  5.   String strResult = "";     
  6.   try {     
  7.    HttpParams httpParameters = new BasicHttpParams();     
  8.    HttpConnectionParams.setConnectionTimeout(httpParameters, 6000);     
  9.    HttpClient httpClient = new DefaultHttpClient(httpParameters);      
  10.         
  11.    HttpResponse httpResponse = null;     
  12.    httpResponse = httpClient.execute(get);     
  13.         
  14.    if (httpResponse.getStatusLine().getStatusCode() == 200){     
  15.     strResult = EntityUtils.toString(httpResponse.getEntity());     
  16.    }     
  17.   } catch (Exception e) {     
  18.    e.printStackTrace();   
  19.   }    

发现请求总是无法得到,在浏览器中尝试发现请求语句没有问题

DDMS报错为:android.os.NetworkOnMainThreadException

经查询发现原来Android3.0以上对网络请求做了更严格的限制,若要继续按照以前的方式继续使用网络请求,须做一些特别的声明。

 

解决办法:

在Activiey的OnCreate方法中添加以下代码

[java] view plain copy
  1. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites()  
  2. .detectNetwork()   // or .detectAll() for all detectable problems  
  3. .penaltyLog()  
  4. .build());  
  5. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());  

 

 


你可能感兴趣的:(安卓3.0之后的网络访问问题)