我的 Android 应用程序有一个 IntentService,它从 Facebook 请求 MessageThreads 对象列表,解析 JSON 响应以构建对象的 ArrayList:
ArrayList<MessageThread> mMessageThreads = new ArrayList<MessageThread>();
然后它在同一服务中再次调用 FB,获取 MessageThread id 的名称并将它们与 MessageThread 对象进行匹配。此时,我有一个包含完整 MessageThread 对象的 ArrayList,并将它们插入到 SQLite 数据库中。
// save to db and broadcast
for (MessageThread message : mMessageThreads) {
((FBClientApplication)getApplication()).getMessagesData().insertOrIgnore(message.toContentValues();
}
地点:
public void insertOrIgnore(ContentValues values) {
SQLiteDatabase db = this.dbHelper.getWritableDatabase();
db.insertWithOnConflict(TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE);
}
通过 ACRA 报告,我发现线路时断时续
for (MessageThread message : mMessageThreads)
抛出一个ConcurrentModificationException
并且应用程序关闭。我无法在什么条件下进行隔离。我读到了有关此 Exception
的信息,据我了解,当我们在迭代 ArrayList
时删除项目时,就会发生这种情况,但我不会从列表中删除项目。非常感谢任何有助于解决此问题的指示。
最佳答案
当您在迭代 ArrayList
时向其添加项目时,也会发生这种情况,您可能会在这段代码中执行此操作。
一般来说,ArrayList
发生的任何“结构修改”都可能在迭代时导致 CME。
关于java - ConcurrentModificationException 使我的应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741412/