Android Geocoder getFromLocationName总是返回null

我一直在尝试对一个string进行地理编码来获得它的坐标,但是我的程序总是崩溃,因为当我尝试使用getFromLocationName()它将返回null 。 我一直在努力解决这个问题,但没有任何工作。 这是我的代码

 public class MainActivity extends Activity { private GoogleMap mMap; List<Address> addresses; MarkerOptions miami; String myLocation = "Miami,Florida"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (mMap == null) { mMap = ((MapFragment) getFragmentManager().findFragmentById( R.id.map)).getMap(); } if (mMap != null) { Geocoder geocoder = new Geocoder(this); double latitude = 0; double longitude = 0; while(addresses==null){ try { addresses = geocoder.getFromLocationName(myLocation, 1); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Address address = addresses.get(0); if (addresses.size() > 0) { latitude = address.getLatitude(); longitude = address.getLongitude(); } LatLng City = new LatLng(latitude, longitude); miami = new MarkerOptions().position(City).title("Miami"); mMap.addMarker(miami); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(City, 15)); } } 

Geocoder并不总是返回一个值。 您可以尝试在for循环中发送一个请求3次。 我应该能够至less返回一次。 如果不是那么,他们可能是一个连接问题,也可以是其他问题,如服务器不答复您的请求。 尝试看看这些线程:

Geocoder并不总是返回一个值 , geocoder.getFromLocationName只返回null

更新:

我也有一个while循环,但我曾经最多尝试了10次。 有时,即使连接到互联网,它也不会返回任何东西。 然后,我每次使用这个更可靠的方法来获取地址:

 public JSONObject getLocationInfo() { HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lng+"&sensor=true"); 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; } 

我把它叫做如下:

 JSONObject ret = getLocationInfo(); JSONObject location; String location_string; try { location = ret.getJSONArray("results").getJSONObject(0); location_string = location.getString("formatted_address"); Log.d("test", "formattted address:" + location_string); } catch (JSONException e1) { e1.printStackTrace(); } 

希望这可以帮助。 我也厌倦了依靠地理编码器。 这对我有效。 如果使用纬度和经度坐标replaceURL,并在Web浏览器中查看返回的JSON对象。 你会看到刚刚发生的事情。