Вопрос

Я получил следующий код в моем 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 () всегда возвращает ссылку на тот же массив, но что массив изменяется в режиме реального времени? Если это так, это может быть ваша проблема.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top