realm-java: ConcurrentModificationException when using iterators methods
Hi, I have such exception even I using iterators methods: Realm version 0.75.1, Android studio 1.0rc2
Caused by: java.util.ConcurrentModificationException: No outside changes to a Realm is allowed while iterating a RealmResults. Use iterators methods instead.
at io.realm.RealmResults.assertRealmIsStable(RealmResults.java:405)
at io.realm.RealmResults.access$200(RealmResults.java:44)
at io.realm.RealmResults$RealmResultsIterator.hasNext(RealmResults.java:422)
at com.coachesdirectory.coach.db.RealmHelper$5.doInBackground(RealmHelper.java:360)
at com.coachesdirectory.coach.db.RealmHelper$5.doInBackground(RealmHelper.java:347)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Here is part of my code:
****AsyncTask*****
List<SchoolResult> favoriteSchools = params[0];
Realm realm = Realm.getInstance(context);
realm.beginTransaction();
// Set all schools to remove
RealmResults<RealmSchoolResult> markToRemove = realm.where(RealmSchoolResult.class)
.equalTo("userAccountId", userId)
.findAll();
Iterator<RealmSchoolResult> schoolResultIterator = markToRemove.iterator();
while (schoolResultIterator.hasNext()) { // Crash at this line
RealmSchoolResult realmSchoolResult = schoolResultIterator.next();
realmSchoolResult.setNeedRemove(true);
}
About this issue
- Original URL
- State: closed
- Created 10 years ago
- Comments: 40 (17 by maintainers)
Commits related to this issue
- fix realm's crash — committed to kurumi-moe/ShadowVPNAndroid by kurumi-moe 9 years ago
The standard
List.remove()
method doesn’t work for normal ArrayList iterators either . You should use the Iterator.remove() method instead, it ensures that the iterator count isn’t counting wrong https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove():Fixed in 0.89