Android google maps центр имени местоположения камеры

привет, ребята, у меня есть маркер в центре камеры с картой, и я хочу показать, где сейчас находится информация о маркере места, я пишу это пока, но он не работает, и вот ошибка

 @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    Toast.makeText(getContext(), "Map is Ready", Toast.LENGTH_SHORT).show();
        getDeviceLocation();

    mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {
            Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());

            try {
                List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
                Address obj = addresses.get(0);
                String add = obj.getAddressLine(0);
                Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
                Log.e("IGA", "Address" + add);


            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });


    }

это ошибка, и она исходит из списка

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
1
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы не опубликовали всю трассировку стека, я не могу точно знать, какой объект выбрасывает IndexOutOfBoundsException. Но этот пример кода должен указать вам правильное направление.

@Override
public void onCameraChange(CameraPosition cameraPosition) {
    Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());

    try {
        List<Address> addresses = geocoder.getFromLocation(cameraPosition.target.latitude,cameraPosition.target.longitude, 1);
        for(Address address : addresses){
            if (address.getMaxAddressLineIndex() > -1){
                String add = address.getAddressLine(0);
                Toast.makeText(getContext(), add, Toast.LENGTH_SHORT).show();
                Log.e("IGA", "Address" + add);
            }
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
    }
}

Я добавил цикл foreach для объекта addresses. Я вижу, что вы установили максимальный адрес 1 в свой метод getFromLocation(), но если вы измените его на большее число, этот код все равно должен работать для всех Addresses.

Я также проверил, действительно ли address имеет значение getAddressLine(0), проверив, что getMaxAddressLineIndex() больше -1. Это индекс не в счет. getMaxAddressLineIndex() вернет -1, если он пуст.

Большое спасибо за помощь, пожалуйста, подскажите, что мне еще опубликовать? потому что этот код тоже не работает, на этот раз нет сбоев, тостов или журналов

raza Amini 03.04.2018 22:50

Большое спасибо, теперь он работает, у меня есть еще один вопрос, и это очень полезно, если вы можете мне помочь, могу ли я изменить язык этого местоположения? Я из Ирана, и я хочу, чтобы адреса этого местоположения были фарси

raza Amini 03.04.2018 22:53

я вижу места на фарси в иранских приложениях

raza Amini 03.04.2018 22:54

Нет, я не хочу вас беспокоить. Искал сам, но не нашел. Большое спасибо за помощь.

raza Amini 03.04.2018 22:57

@razaAmini :: Я вижу, вы уже пробовали new Geocoder(getContext(), Locale.getDefault());, и я не думаю, что Geocoder geocoder = new Geocoder(getContext(), new Locale("fa","IR")); подойдет. Удачи в поиске нужного языкового стандарта.

Barns 03.04.2018 23:09

Большое спасибо, я так новичок в программировании на Android, и я не могу так хорошо писать по-английски, и я не нашел никаких сайтов на местном языке, чтобы объяснить это, большое спасибо, чувак, извини за беспокойство

raza Amini 03.04.2018 23:17

Другие вопросы по теме