Я пытаюсь поместить маркер в ArrayList

#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 / or if (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 .