【发布时间】:2018-07-16 07:06:23
【问题描述】:
我在将数据插入 Android 表时遇到问题。这是我的道函数:
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(freight: Foo)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(freights: MutableList<Foo>)
这是它的调用方式:
Observable.fromCallable {
db.fooDao().insert(it)
}
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe {
Logger.d("Inserted ${it} users from API in DB...")
}
我得到的异常:
Caused by: java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:860)
at com.blockgrain.blockgrain.dbmanager.repository.FooRepository$insertDataInDb$1.call(FooRepository.kt:76)
我创建了其他具有相同逻辑的表,它们工作正常,但这个失败了。请让我知道出了什么问题。
更新:
Foo.kt
override fun get(): Observable<MutableList<Foo>> {
val observable = getDataFromDb()
return observable.flatMap {
if (it.isEmpty())
getDataFromApi()
else
observable
}
}
override fun getDataFromApi(): Observable<MutableList<Foo>> {
return WebService.createWithAuth().getFooFromWeb()
.doOnNext {
Logger.d(" Dispatching ${it} users from API...")
Observable.fromCallable {
db.fooDao().insert(it)
}
}
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe {
Logger.d("Inserted ${it} users from API in DB...")
}
}
}
【问题讨论】:
-
你在这里调用哪种方法
db.fooDao().insert(it)用于单个元素或Foo列表? -
我尝试了单一和列表..都失败了同样的异常
-
您确定没有在访问列表的同时修改列表吗?你能分享
FooRepository.kt:76的代码吗? -
为 FooRepository 添加了代码。异常在 db.fooDao().insert(it)
-
您是否尝试使用此代码插入多个项目?
标签: android android-sqlite android-room