java - ConcurrentModificationException 使我的应用程序崩溃

标签 java android

我的 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/

相关文章:

java - IntelliJ Idea 自动创建新方法

java - Eclipse 在 Linux 上的 Java 进程中不释放内存

android - 从 SD 卡(上的目录)获取文件列表的好方法是什么?

java - Android fragment 不工作

android - 相机预览显示黑屏

android - 通过代码区分安卓设备 [8inch vs 10 inch tablet]

java - 单击布局时如何选中复选框?

java - 创建一个调用构造函数的模拟

java - 为什么实例变量在java中有默认值?

java - 禁止 Mule ESB 阻止某些请求