2015-06-15 4 views
0

Я пытаюсь отобразить простое имя места в тосте. В этом случае это был популярный момент, как «Лос-Анджелес». Я использую следующий код:Обратное геокодирование возвращает IndexOutOfBoundsException

Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault()); 

    try { 
     List<Address> addresses = geocoder.getFromLocation(34.0500, -118.2500, 1); 

     //Line Where the error occurs 
     String cityandstate = addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea(); 

     Toast.makeText(getActivity(), cityandstate, Toast.LENGTH_LONG).show(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

Когда я запускаю это, я получаю ошибку java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0. Я не совсем уверен, что я делаю неправильно. Вся помощь ценится!

UPDATE

добавляя свои права, а также для уточнения:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
+0

@DanielNugent Я изменил его на правильные координаты, но я все еще получаю ту же ошибку. –

+0

вы предполагаете, что геокодер возвращает материал. видимо, это не так. – njzk2

+0

@SolomonPowell вы нашли решение? – peshkira

ответ

1

getFromLocation возвращает никаких результатов, и вы не проверить для этого случая. Затем вы пытаетесь получить доступ к первому результату, но он не существует, и вы получаете исключение IndexOutOfBoundException.

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

if (addresses != null && addresses.size() > 0) { 
    String cityandstate = addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea(); 
    ... 
} else { 
    // give feedback to the user 
} 

Почему вы не получите результаты могут быть по разным причинам. Вот несколько идей.

У меня были подобные проблемы с Geocoder, пока я не добавил следующее разрешение.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Кажется, что Geocoder не всегда работает без этого разрешения, поскольку он не может кэшировать результаты. (Android пытается максимально оптимизировать вызовы на сервере).

Другой проблемой может быть, если вы не протестируете на реальном устройстве, а на эмуляторе или какую-то специальную установку Android.

Вот фрагмент документов Geocoder.

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

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