Android 房间中的惰性和更新项目不';I don’我没有按预期工作
我使用Kotlin和Room进行一些基本操作。所有操作都可以正常工作,但是Android 房间中的惰性和更新项目不';I don’我没有按预期工作,android,kotlin,android-room,Android,Kotlin,Android Room,我使用Kotlin和Room进行一些基本操作。所有操作都可以正常工作,但是updateAll,它没有更新数据库。刀的形状如下: @Dao interface ItemListDao { @Insert fun insertAll(itemLists: List<ItemList>) @Insert//(onConflict = OnConflictStrategy.IGNORE) fun insert(itemLists: ItemList)
updateAll
,它没有更新数据库。刀的形状如下:
@Dao
interface ItemListDao {
@Insert
fun insertAll(itemLists: List<ItemList>)
@Insert//(onConflict = OnConflictStrategy.IGNORE)
fun insert(itemLists: ItemList)
@Delete
fun delete(itemList: ItemList)
@Update(onConflict = OnConflictStrategy.REPLACE)
fun update(itemList: ItemList)
@Transaction
fun upset(itemList: ItemList) {
try {
insert(itemList)
} catch (exception: SQLiteConstraintException) {
update(itemList)
}
}
@Transaction
fun updateAll(itemLists: List< ItemList>) {
itemLists.forEach {
upset(it)
}
}
}
@Entity
data class ItemList constructor(
@PrimaryKey val listId: String,
val displayName: String
}
在udpate
方法中,然后在updateAll
中,我只调用update
,但实际上无法通过单元测试
编辑
我目前的做法
@Transaction
fun updateAll(itemLists: List< ItemList>) {
itemLists.forEach {
val itemList = findItemList(it.listId)
if (itemList != null) {
update(it)
} else {
insert(it)
}
update(it)
}
}
@事务
有趣的更新(项目列表:列表<项目列表>){
itemLists.forEach{
val itemList=findItemList(it.listId)
if(itemList!=null){
更新(it)
}否则{
插入(it)
}
更新(it)
}
}
有什么帮助吗?非常感谢 检查这个答案。如果不存在insert,您可以通过添加onConflictStrategy来直接更新。@Xuzan谢谢,如果您看到上面的代码
update
有@update(onConflict=OnConConflictStrategy.REPLACE)
和我的updateAll
只需调用udpate,但是它没有按预期工作。@WilliamHu你能粘贴你的ItemList实体吗?在我卸载应用程序之后,`@Update(onConflict=OnConflictStrategy.REPLACE)`工作。
@Transaction
fun updateAll(itemLists: List< ItemList>) {
itemLists.forEach {
val itemList = findItemList(it.listId)
if (itemList != null) {
update(it)
} else {
insert(it)
}
update(it)
}
}