我有一个代码在ArrayMap键上进行迭代,并且由于未知原因导致数组索引超出界限异常
从Crashalytics:
Fatal Exception: java.lang.ArrayIndexOutOfBoundsException
length=56; index=56
android.util.ArrayMap$1.colGetEntry (ArrayMap.java:763)
android.util.MapCollections$ArrayIterator.next (MapCollections.java:55)
代码如下所示:
private ArrayMap<String,RequestData> handlers = new ArrayMap<>();
public void removeAllHandlers() {
synchronized (handlers) {
for (String s : handlers.keySet()) {
handlers.remove(s);
}
}
}
异常发生在此行:
for (String s : handlers.keySet())
任何线索我在做什么错?
最佳答案
迭代时无法从Map
或List
中删除。
使用Map
/ List
的内部清除方法。
例如,handlers.clear();
码:
private ArrayMap<String,RequestData> handlers = new ArrayMap<>();
public void removeAllHandlers() {
synchronized (handlers) {
handlers.clear();
}
}