Продолжайте получать "IndexOutOfBoundsException: Index: 0, Size: 0" при попытке проверить запись массива - PullRequest
0 голосов
/ 20 мая 2019

Я предлагаю товары в menuItemArrayList, и когда пользователь помещает товары по своему выбору в корзину, они будут добавлены в selectionItemArrayList. Вот мой код, который проверяет, существует ли продукт в корзине. Если это так, то обновляется только количество.

Я возился с кодом, но постоянно получаю эту ошибку

    IndexOutOfBoundsException: Index: 0, Size: 0

Код - это всего лишь выдержка из onClickListener из onBindHolder из рециркулятора:

int position = getAdapterPosition();

for (int j = 0; j <= selectionItemArrayList.size(); j++) {
if (menuItemArrayList.get(position).getMenuItemName().equals(selectionItemArrayList.get(j).selectionName)) { // Loop through selection array to see if item exists in array
selectionItemArrayList.get(j).selectionQuantity += 1; // if it does exist then only update the quantity by 1
} else {
// Get the item name, price and add 1 to the quantity
String menuItemName = menuItemArrayList.get(position).getMenuItemName();
 String menuItemPrice = menuItemArrayList.get(position).getMenuItemPrice();
SelectionItem selectionItems = new SelectionItem(menuItemName, menuItemPrice, 1);
selectionItemArrayList.add(selectionItems);
}
}

Есть идеи, что я делаю не так? Исключение выдается в строке, где я сравниваю название продукта в основном массиве с именем в массиве корзины.

1 Ответ

0 голосов
/ 20 мая 2019

Это ваш цикл:

for (int j = 0; j <= selectionItemArrayList.size(); j++)

При итерации по списку вы почти всегда хотите использовать <, а не <=. Это связано с тем, что индексы списков начинаются с 0. Таким образом, список размером 2 содержит элементы с номерами 0 и 1.

Когда вы используете <= в списке с нулевыми элементами, он все равно будет пытаться получить доступ к элементу с индексом 0 (потому что 0 - <= 0). Но ваш список пуст; у него нет элемента с индексом 0. Таким образом, вы терпите крах.

Попробуйте вместо этого:

for (int j = 0; j < selectionItemArrayList.size(); j++)
...