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对象。 你会看到刚刚发生的事情。
- Android Google Maps API V2缩放至当前位置
- 用CameraUpdateFactory.newLatLngBounds崩溃moveCamera
- 如何在路线谷歌地图v2机器人上绘制交互式折线
- Google Maps API v2:如何让标记点击?
- 如何在Google Maps for Android API v2上显示我的位置
- GooglePlayServicesUtil.getErrorDialog为null
- 如何知道在使用SupportMapFragment时地图已准备好使用?
- Android的Google地图片段在xml中。 我得到“意外的命名空间前缀”
- 如何使用Android地图API v2创build自定义形状的位图标记