#java #android
#java #Android
Вопрос:
Я пытаюсь поместить маркер в ArrayList таким образом:
Сначала я объявляю в классе MainActivity:
public ArrayList<Marker> myList = new ArrayList<Marker>();
После запуска моя программа отмечает первую точку и скрывает ее:
if (myList.get(0)==null)
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
.visible(false)
myList.add(0, mMap.addMarker(options));
}
затем я пишу, что нажата кнопка следующего маркера
myButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
LatLng latLng = new LatLng(currentLatitude, currentLongitude)
if (myList.get(0) != null)
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
myList.add(1,mMap.addMarker(options));
}
else if (myList.get(0) != null amp;amp; (myList.get(1) != null))
{
MarkerOptions options = new MarkerOptions()
.position(latLng)
myList.add(2,mMap.addMarker(options));
}
И приложение получает сбой при запуске…
Когда вместо списка была вкладка [], программа будет работать
java.lang.Исключение IndexOutOfBoundsException: недопустимый индекс 0, размер равен 0
Комментарии:
1. Добавить Logcat с ошибкой.
2. java.lang. Исключение IndexOutOfBoundsException: недопустимый индекс 0, размер равен 0
3. пожалуйста, укажите строку, в которой вы получаете исключение….
4. Это означает, что вы пытаетесь
myList.get(0)
или что-то подобное в пустом списке. Пожалуйста, обратите внимание, что недостаточно проверить, чтоmyList.get(0)
это не null, поскольку вызоваget()
метода достаточно, чтобы произошла ошибка. Вместо этого попробуйте что-то вродеif (! myList.isEmpty())
and / orif (myList.size() >= 2)
.
Ответ №1:
Перед получением индекса 0 вашего массива проверьте, не пусто ли оно.
if (!myList.isEmpty())
{
if (myList.get(0)==null)
{
//do your thing
}
}
Ответ №2:
Эти нулевые проверки не нужны, просто используйте List.add(Object o)
функцию, которая не принимает индекс в качестве аргумента.
Ответ №3:
Бьюсь об заклад, эта строка вызывает сбой:
myList.add(1,mMap.addMarker(options))
Если myList
значение пустое, вызов myList.add(foo, 1)
вызовет an IndexOutOfBoundsException
, что приведет к сбою вашего приложения. Причина этого в том, что массивы проиндексированы на 0, что означает, что первое значение имеет индекс 0. Это может показаться нелогичным, но добавление чего-либо к индексу 1 пустого списка на самом деле пытается установить его второй элемент.
В целом, ваш код очень странно структурирован. Неиндексированная версия List.add(Object o)
добавляет элемент в конец списка, поэтому вы можете просто использовать его в своем OnClickListener
.