원인 : mHashMap 객체를 for문 읽고 있는중 mHashMap 객체가 삭제되는 경우 발생
HashMap<String, String> mHashMap = new HashMap<>();
for (Map.Entry<String, Session> map : mHashMap.entrySet()) {
delete(map.getKey(), DeleteReason.CLOSE);
}
에러 메시지
*** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:757)
at java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:790)
at java.util.LinkedHashMap$LinkedEntryIterator.next(LinkedHashMap.java:788)
...
...
...
at android.os.Binder.execTransact(Binder.java:731)
해결 방법
아래와 같이 HashMap 객체를 복사해 원본 mHashMap을 사용하지 않고 cloen HashMap 객체로 for문을 이용해 삭제
HashMap<String, String> cloneHashMap = (HashMap<String, String>) mHashMap.clone();
HashMap<String, String> mHashMap = new HashMap<>();
HashMap<String, Session> cloneHashMap = (HashMap<String, String>) mHashMap.clone();
for (Map.Entry<String, String> map : cloneHashMap.entrySet()) {
delete(map.getKey(), DeleteReason.CLOSE);
}
Cloen을 사용하거나 임시 객체에 복사하면 ConcurrentModificationException 해결됨.
반응형
'Android > Exception' 카테고리의 다른 글
[안드로이드] Firebase java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/internal/firebase-perf/M; (36) | 2020.09.22 |
---|---|
[안드로이드] java.lang.IllegalAccessException: java.lang.Class (0) | 2020.07.28 |
[안드로이드] java.net.UnknownHostException 에러 (0) | 2020.06.09 |
안드로이드 ClassCastException 에러 (0) | 2020.06.04 |