我的 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
在迭代它时删除项目时会发生这种情况,但我没有从列表中删除项目。非常感谢任何有助于解决此问题的指针。