3

我无法在 Android 7.0 中使用反向地理编码功能。它在 Marshmallow 中运行良好,并且在另一部带有 kitkat 的手机上运行正常。

错误是请求中的超时:

java.io.IOException: Timed out waiting for response from server
   at android.location.Geocoder.getFromLocation(Geocoder.java:136)

Geocoder isPresent 方法确实返回 true。

4

1 回答 1

0

我通过向maps api发出请求解决了这个问题

并像这样处理json响应:

public void onResponse(JSONObject response) {
                    JsonArray results;
                    try {
                        results = ((JsonArray)new JsonParser().parse(response.get("results").toString()));
                    } catch (JSONException e) {
                        e.printStackTrace();
                        return;
                    }
                    String country = "";
                    String stateProvince = "";
                    String locality = "";
                    String hood = "";
                    if (results.size() > 0) {
                        JsonArray address = results.get(0).getAsJsonObject().get("address_components").getAsJsonArray();
                        for (JsonElement component : address) {
                            JsonObject data = component.getAsJsonObject();
                            for (JsonElement type : data.get("types").getAsJsonArray()) {
                                if (type.getAsString().equals("country")) {
                                    country = data.get("short_name").getAsString();
                                } else if (type.getAsString().equals("administrative_area_level_1")) {
                                    stateProvince = data.get("short_name").getAsString();
                                } else if (type.getAsString().equals("locality")) {
                                    locality = data.get("long_name").getAsString();
                                } else if (type.getAsString().equals("sublocality")) {
                                    hood = data.get("long_name").getAsString();
                                }
                            }
                        }
                    }
                    final String address = getFormattedAddress(country, stateProvince, locality, hood);
}

public String getFormattedAddress(String country, String state, String locality, String hood) {
    String address = "";
    if(hood.isEmpty()){
        if(locality.isEmpty()){
            if(!state.isEmpty()){
                address += state;
            }
        }else{
            address += locality;
            if(!state.isEmpty()){
                address += ", " + state;
            }
        }
    }else{
        address = hood;
        if(locality.isEmpty()){
            if(!state.isEmpty()){
                address += ", " + state;
            }
        }else{
            address += ", " + locality;
        }
    }
    if(!country.isEmpty()){
        if(!address.isEmpty()){
            address += ", " + country;
        }else{
            address += country;
        }
    }
    return address;
}
于 2016-09-06T17:31:04.313 回答