java ConcurrentModificationException Room Android
我在应用程序中使用Room,在将数据插入数据库时,有时会抛出ConcurrentModificationException
。为什么会这样
我使用分页api,在每次api调用之后,我使用
new Thread(new Runnable() {
@Override
public void run() {
appDatabase.dataDao().insertMultipleData(dataList);
}
}).start();
在哪里
appDatabase = Room.databaseBuilder(context, AppDatabase.class, AppDatabase.DATABASE_NAME)
.fallbackToDestructiveMigration()
.build();
插入操作
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertMultipleData(List<Data> dataList);
# 1 楼答案
如果您试图在分页列表中插入数据,这是一种典型的情况。因为您没有粘贴错误日志,所以我假设错误是由dataList对象引起的。在这种情况下,错误消息如下所示
如果是这种情况,错误是由不同线程并行修改同一变量引起的。在本例中,我假设您正在将数据插入数据库,同时执行新的服务调用(分页)以获取更新相同数据对象的数据。或者,即使您在插入原始数组源时从原始数组源中删除了内容,也会引发此错误。解决方案非常简单。您可以将变量数据列表复制到新变量,并将新的局部变量用作insert调用的参数
例如:(科特林)
例如:(爪哇)