Почему ArrayIndexountOFBoundSexception происходит здесь?
Вопрос
Я получил следующий код в моем Android-приложении:
Event[] events = retrieveEvents();
if (events != null && events.length>0) {
int eventNr = getFromUserInput();
eventNr = eventNr % events.length;
Event event = events[eventNr];
}
Retreveerevents () получает некоторые Event
с интернета, так что это может потерпеть неудачу, хотя будь пустым или null
. Отказ Пользователь может выбрать, какой Event
Для отображения, чтобы избежать исключения, я использую работу по модулю, чтобы обеспечить eventNr
находится в пределах. Это работает нормально на любых устройствах, на которых я тестировал, но:
Я получаю сообщение об ошибках от других пользователей, где вторая последняя строка (Actray-Access) бросает ArrayIndexOutOfBoundsException
. Отказ Как это может случиться? Какое состояние я оставил незаменимым? Где моя ошибка?
Помните: то retrieveEvents()
и то getFromUserInput()
Функция может вернуть неверные данные, но я думаю, что я проверил каждый случай, так где же моя вина?
Решение
Вы гарантировали, что eventNr
никогда не отрицательный? Чек не в вашем цитированном коде. Проблема в том, что если, например, eventNr
является -1
и events.length
это 5, -1 % 5 = -1
и конечно events[-1]
не имеет границ.
Другие советы
Это резьбовое приложение? Возможно ли, что Retreveerevents () всегда возвращает ссылку на тот же массив, но что массив изменяется в режиме реального времени? Если это так, это может быть ваша проблема.