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 ,但永远无法重现此错误。

这只发生在应用程序发布到市场后。 我以前从未见过这个错误。

最糟糕的是它没有来自我的应用程序的代码所以我甚至不知道用户在发生这种情况时做了什么。

有没有人见过这种错误?

有没有人知道从哪里开始修复这个?

Solutions Collecting From Web of "Android索引超出边界错误,堆栈跟踪中没有应用程序代码"

如果您在三星手机上运行此function,请查看此StackOverflow问答:

在Froyo上ListView随机IndexOutOfBoundsException

我也在运行Lollipop的Nexus 5上遇到了同样的例外。 如果我:

  • 在显示列表时拔下设备插头
  • 让设备入睡
  • 将设备重新插入,导致列表内容刷新

添加一个虚拟页脚没有修复它,它只是将错误更改为Invalid index 1, size is 1 🙂 …但是由于@AlexD我有一个线索,在哪里寻找变通方法。

在我的情况下,成功创建ListView后调用list.setFooterDividersEnabled(false)可防止崩溃发生。

当listview为空时我有同样的错误。 看完源代码后我发现了崩溃的行:

 return mFooterViewInfos.get(adjPosition - adapterCount).isSelectable 

正如你所看到的那样,没有检查mFooterViewInfos是否为空,所以我对这个问题的解决方法就是添加一个虚拟页脚:

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

也许迟到了,但我想我find了解决方法。 想要在离开片段/活动之前删除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); } } 

也许你的活动被杀死然后被重新创建(例如当屏幕方向改变时),所以你的数组被初始化为零元素,而你的程序的其他部分却不知道这一点,并期望该数组有一些元素。