2013-07-09 2 views
0

Это кодНевозможно использовать геокодер, дает необработанный тип IOException

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
       Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       double longitude = location.getLongitude(); 
       double latitude = location.getLatitude(); 
       Geocoder gcd = new Geocoder(context, Locale.getDefault()); 
       List<Address> addresses = **gcd.getFromLocation(latitude, longitude, 1);** 

Часть, которая выдает ошибку, выделяются звездочками.

спасибо.

ответ

3

getFromLocation() выдает IOException, если сеть недоступна или возникла какая-либо другая проблема ввода-вывода.

http://developer.android.com/reference/android/location/Geocoder.html#getFromLocation(double, double, int)

Чтобы решить, окружить его с try/catch блока:

try { 
    List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 
2

В дополнение к Кен Волки ответ, вы должны проверить, если Геокодер услуга доступна на устройстве.

«Для класса Geocoder требуется бэкэнд-сервис, который не входит в базовую инфраструктуру андроида. Методы запросов Geocoder возвратят пустой список, если в платформе нет поддержки бэкэнд. Используйте метод isPresent(), чтобы определить, Реализация геокодирования существует. " - Google

Так что ваш код должен выглядеть следующим образом:

if(Geocoder.isPresent()){ 
    Geocoder gcd = new Geocoder(context, Locale.getDefault()); 
    try { 
     List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1); 
    } catch (IOException e) { e.printStackTrace(); } 
} 
+0

'Geocoder.isPresent()' доступна только на API 9 или выше. – techiServices

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