【发布时间】:2015-02-15 22:20:17
【问题描述】:
我在一个 Android 应用程序中遇到了一个奇怪的问题。 我有一个 ArrayList,我尝试使用 get(0) 获取第一个项目。 但是应用程序有时会因为 IndexOutOfBoundsException 而崩溃。
代码:
int currentItemPosition = 0;
if(!mArrayList.isEmpty()) {
currentItem = mArrayList.get(currentItemPosition);
}
这怎么可能?
日志:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
...
【问题讨论】:
-
mArrayList是否被多个线程访问/更新? -
这是您正在运行的实际代码还是演示?
-
唯一可能的选择是在 empty() 检查和 ArrayList.get() 之间修改列表。您应该寻找修改列表的其他线程。当您在 Android 应用程序中运行代码时,可能有些东西正在修改您的列表。更多关于创建列表以及何时抛出异常的代码可能会有所帮助
-
isEmpty()不会返回 true,如果mArrayList是 null(从不实例化)。 -
试试这个:int currentItemPosition = 0; synchronized(mArrayList){ if(!mArrayList.isEmpty()) { currentItem = mArrayList.get(currentItemPosition); } }