Android Geocoder getFromLocationName失败,并带有有效地址

时间:2016-08-21 11:19:05

标签: java android google-geocoder

我试图获取特定地址的纬度和经度     addressList = geoCoder.getFromLocationName(locationName,1);

对于大多数地址来说这很好用,但是有一些有效的地址,比如" Lentoasemantie 1,Vantaa",它返回空数组。奇怪的是,有效的地址过去常常在4天前工作,但现在大部分地址继续有效。

所以,这看起来像谷歌后端问题,我想知道我应该向谷歌报告(在哪里/如何?)或者不再使用地理编码器,因为它本身就不可靠?

1 个答案:

答案 0 :(得分:1)

Geocoder Android API效率不如Google Maps Geocoding API,因此我建议您使用此API而不是Geocoder。 您可以在下方找到函数,通过排球队列从地址获取位置(对于Lentoasemantie 1,Vantaa,它有效):

public void getLocationFromAddress(String address) {
    String url = "https://maps.googleapis.com/maps/api/geocode/json?address="
            + Uri.encode(address) + "&sensor=true&key=API_KEY";
    RequestQueue queue = Volley.newRequestQueue(this);
    JsonObjectRequest stateReq = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            JSONObject location;
            try {
                // Get JSON Array called "results" and then get the 0th
                // complete object as JSON
                location = response.getJSONArray("results").getJSONObject(0).getJSONObject("geometry").getJSONObject("location");
                // Get the value of the attribute whose name is
                // "formatted_string"
                if (location.getDouble("lat") != 0 && location.getDouble("lng") != 0) {
                    LatLng latLng = new LatLng(location.getDouble("lat"), location.getDouble("lng"));

                    //Do what you want
                }
            } catch (JSONException e1) {
                e1.printStackTrace();

            }
        }

    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d("Error.Response", error.toString());
        }
    });
    // add it to the queue
    queue.add(stateReq);

}