android java.io.IOException:服务不可用

说明: 我正在使用Google maps API V2 。我在触摸的位置实施了Android Reverse Geocoding

问题:它抛出exception

  try { addresses = geocoder.getFromLocation(latitude, longitude,1);} catch (IOException e) { e.printStackTrace(); if(AppConstants.DEBUG)Log.v(AppConstants.DEBUG_TAG," e.printStackTrace(): "+e.getMessage()); } 

我收到正确的longitude值,但我不明白为什么会抛出exception ,我也做了谷歌search,但它不能帮助。

有谁可以请详细解释?

Solutions Collecting From Web of "android java.io.IOException:服务不可用"

正如在Android的这个问题38009 – 地理编码器抛出exception:IOException:服务不可用 重新启动设备将解决问题

如果你不想重新启动设备使用这个

  public JSONObject getLocationFormGoogle(String placesName) { HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=" +placesName+"&ka&sensor=false"); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } public LatLng getLatLng(JSONObject jsonObject) { Double lon = new Double(0); Double lat = new Double(0); try { lon = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return new LatLng(lat,lon); } LatLng Source =getLatLng(getLocationFormGoogle(placesName)); 

我修改了@Ani解决scheme从lat long参数中获取城市名称:

 public static String getLocationCityName( double lat, double lon ){ JSONObject result = getLocationFormGoogle(lat + "," + lon ); return getCityAddress(result); } protected static JSONObject getLocationFormGoogle(String placesName) { String apiRequest = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" + placesName; //+ "&ka&sensor=false" HttpGet httpGet = new HttpGet(apiRequest); HttpClient client = new DefaultHttpClient(); HttpResponse response; StringBuilder stringBuilder = new StringBuilder(); try { response = client.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } protected static String getCityAddress( JSONObject result ){ if( result.has("results") ){ try { JSONArray array = result.getJSONArray("results"); if( array.length() > 0 ){ JSONObject place = array.getJSONObject(0); JSONArray components = place.getJSONArray("address_components"); for( int i = 0 ; i < components.length() ; i++ ){ JSONObject component = components.getJSONObject(i); JSONArray types = component.getJSONArray("types"); for( int j = 0 ; j < types.length() ; j ++ ){ if( types.getString(j).equals("locality") ){ return component.getString("long_name"); } } } } } catch (JSONException e) { e.printStackTrace(); } } return null; }