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