Подтвердить что ты не робот

Ошибка индекса Android за пределами границ без кода приложения в трассировке стека

Это трассировка стека:

java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)
    at java.util.ArrayList.get(ArrayList.java:311)
    at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164)
    at android.widget.ListView.dispatchDrawWithExcessScroll_Default(ListView.java:3354)
    at android.widget.ListView.dispatchDraw(ListView.java:3054)
    at android.view.View.draw(View.java:6936)
    at android.widget.AbsListView.draw(AbsListView.java:3022)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.View.draw(View.java:6936)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.View.draw(View.java:6936)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
    at android.view.View.draw(View.java:6936)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1904)
    at android.view.ViewRoot.draw(ViewRoot.java:1527)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1263)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
    at dalvik.system.NativeStart.main(Native Method)

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

Это произошло только после того, как приложение было отправлено на рынок. Я никогда не видел эту ошибку раньше.

Хуже всего то, что у него нет кода из моего приложения, поэтому я даже не знаю, что делает пользователь, когда это произошло.

Кто-нибудь видел такую ​​ошибку?

Кто-нибудь знает, с чего начать исправление?

4b9b3361

Ответ 2

Я также столкнулся с тем же самым исключением на Nexus 5, работающем с Lollipop. Это произойдет, если I:

  • отключить устройство, пока отображается список.
  • пусть устройство засыпает
  • снова подключено устройство, в результате чего содержимое списка будет обновлено.

Добавление фиктивного нижнего колонтитула не исправить, оно просто изменило ошибку на Invalid index 1, size is 1:)... но благодаря @AlexD у меня была подсказка, где искать обходные пути.

В моем случае вызов list.setFooterDividersEnabled(false) после успешного создания списка ListView предотвращает возникновение сбоя.

Ответ 3

У меня такая же ошибка, когда listview пуст. Посмотрев исходный код, я обнаружил, что сбой:

return mFooterViewInfos.get(adjPosition - adapterCount).isSelectable

Как вы можете видеть, нет проверки, что mFooterViewInfos пуст, поэтому мой обходной путь для этой проблемы - это просто добавление фиктивного нижнего колонтитула:

list.addFooterView(new View(context, null, false));

Ответ 4

Может быть, немного позже, но я думаю, что нашел обходное решение для этого. Думаю, нужно удалить headerView/footerView (в зависимости от того, что вы используете), прежде чем покинуть фрагмент/активности:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ....
        getListView().addHeaderView(mHeaderView);
}


public void onDestroyView() {
    super.onDestroyView();
    if (getListView().getHeaderViewsCount() > 0) {
        getListView().removeHeaderView(mHeaderView);
    }
}

Ответ 5

Возможно, ваша активность будет убита, а затем воссоздана (например, при изменении ориентации экрана), поэтому ваш массив инициализируется нулевыми элементами, и все же какая-то другая часть вашей программы не знает об этом и ожидает, что этот массив будет иметь некоторые элементы,