【问题标题】:Android Geocoder not working in Nexus 6P with Android Nougat 7.0Android Geocoder 无法在 Nexus 6P 中使用 Android Nougat 7.0
【发布时间】:2017-01-05 14:23:02
【问题描述】:

我无法在 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。

【问题讨论】:

    标签: android google-geocoder reverse-geocoding android-7.0-nougat nexus-6p


    【解决方案1】:

    我通过向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-05-16
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多