Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间中的惰性和更新项目不';I don’我没有按预期工作_Android_Kotlin_Android Room - Fatal编程技术网

Android 房间中的惰性和更新项目不';I don’我没有按预期工作

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)

我使用Kotlin和Room进行一些基本操作。所有操作都可以正常工作,但是
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)
    }
   }