본문 바로가기
Android/Exception

[Android] ConcurrentModificationException hashmap 해결 방법

by Jay Son 아기 냥이 해린 짱💖 2021. 4. 8.

원인 : 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 해결됨.

반응형