【问题标题】: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;
}