3

Ich kann nicht die umgekehrte Geocodierungsfunktion in Android 7.0 arbeiten. Es funktionierte gut in Marshmallow, und es funktioniert auf einem anderen Telefon mit Kitkat richtig.Android Geocoder funktioniert nicht in Nexus 6P mit Android Nougat 7.0

Der Fehler ist ein Timeout in der Anforderung:

java.io.IOException: Timed out waiting for response from server 
    at android.location.Geocoder.getFromLocation(Geocoder.java:136) 

der Geocodierer isPresent Methode true zurückgibt.

Antwort

0

Ich löste dies durch eine Anfrage an die maps api

machen und die Json Antwort wie diese behandelt:

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; 
} 
Verwandte Themen