3

Я не могу получить обратную функцию геокодирования для работы на Android 7.0. Он отлично работал в Marshmallow, и он работает правильно на другом телефоне с kitkat.Android Geocoder не работает в Nexus 6P с Android Nougat 7.0

Ошибка тайм-аут в запросе:

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

Метод Geocoder isPresent действительно возвращает истину.

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^