Android Nougat 7.0在Nexus 6P上使用Geocoder无法工作

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。
1个回答

0

我通过向地图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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接