2016-10-06 4 views
0

Я пытаюсь поставить маркер в ArrayList таким образом:Я пытаюсь поставить маркер в 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 && (myList.get(1) != null)) 
    {      
         MarkerOptions options = new MarkerOptions() 
         .position(latLng)           
         myList.add(2,mMap.addMarker(options));   
    } 

И приложение получает аварии на старте ... Когда вместо списка была вкладка [], то программа будет работать

java.lang.IndexOutOfBoundsException: Invalid индекс 0, размер 0

+0

Добавить Logcat с ошибкой. – Pawan

+0

java.lang.IndexOutOfBoundsException: Неверный индекс 0, размер 0 – monik19511

+0

укажите, где вы получаете исключение .... – Opiatefuchs

ответ

0

Держу пари, эта линия является причиной аварии:

myList.add(1,mMap.addMarker(options))

Если myList есть е mpty, вызывая myList.add(foo, 1), вы получите IndexOutOfBoundsException, в результате чего ваше приложение выйдет из строя. Причиной этого является то, что массивы имеют 0-индексирование, что означает, что первое значение имеет индекс 0. Он может казаться контр-интуитивным, но добавление чего-то к индексу 1 открытого списка фактически пытается установить его второй элемент.

В целом, ваш код очень странно структурирован. Неиндексированная версия List.add(Object o) добавляет элемент в конец списка, поэтому вы можете просто использовать его в своем OnClickListener.

1

Прежде чем получить индекс 0 вашего массива, проверьте, не является ли он пустым.

if (!myList.isEmpty()) 
{ 
if (myList.get(0)==null) 
    { 
    //do your thing 
    } 
} 
1

Эти нулевые чеки не являются необходимыми, просто использовать List.add(Object o) функцию, которая не принимает индекс в качестве аргумента.

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