2016-07-22 4 views
1

Я новичок в разработку Android, следуя мой код о использовании Geocoder, чтобы получить название города из текущего местоположения, он возвращает нуль:Android Geocoder возвращает пустой город имя

частной пустота updateCurrentLocation (Место нахождение) { двойных лат = 0,0, lng = 0,0;

if (location != null) { 
     lat = location.getLatitude(); 
     lng = location.getLongitude(); 
     Log.i("tag", "Latitute is" + lat + ", Longtitute is" + lng); 
    } else { 
     City_Name = "Unavailable"; 
    } 
    List<Address> list = null; 
    Geocoder geocoder = new Geocoder(this.getActivity()); 
    try { 
     list = geocoder.getFromLocation(lat, lng, 1); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    //may provide multiple locations. 

    if (list != null && list.size() > 0) { 

      Address address = list.get(0); 
      City_Name = address.getLocality(); 

    } 
    Log.i("Try", "CityName:" + City_Name); 
    //send empty message 
    handler.sendEmptyMessage(1); 
} 

Я открыл GPS-услуги, добавил ACCESS_FINE_LOCATION и разрешение INTERNET в манифесте уже. Кроме того, я искал аналогичные вопросы в Stackoverflow о Geocoder, который возвращает null, но не нашел полезных решений. Один из них анализирует JSON с сайта Geocoder, но он тоже не работает.

Может ли кто-нибудь помочь в этом? Спасибо! BTW, есть ли лучшее решение для получения названия города? Спасибо!

+0

Был ли ваш код выброшен IOException? – josemgu91

+0

Если вы тестируете API 23 или выше, вам необходимо запросить разрешение, иначе оно будет отключено по умолчанию. Быстрое обходное решение заключается в том, чтобы разрешить разрешение из «Настройки»> «Приложения»> «имя приложения»> «Разрешения» – MoGa

+0

@ josemgu91 Нет, это работает хорошо, но просто никакого возвращаемого значения. – LunarS

ответ

0

Если метод getFromLocation дает пустой набор, это связано с тем, что сервер, который просматривается, не имеет адресной информации для координат, которые вы передаете. Это также отмечено in the docs. Поэтому я думаю, что вы должны отпустить его и использовать другую услугу, такую ​​как служба геокодирования Google Maps, или другую, например, Nominatim из проекта OpenStreetMap.