我无法在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。
答案 0 :(得分: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;
}