房间完成删除或添加项目后如何获取回调?

时间:2019-10-05 12:15:12

标签: android android-room

我想在Room完成删除或添加一些项目后立即发送请求。对于数据库,我使用room + livedata,但对于添加/删除项,我使用doAsync。项删除/添加完成后如何获得回调?

添加/删除并进入我的数据库的示例

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun saveUser(user: SavedUserModel)

@Query("SELECT * FROM SavedUserModel")
fun getUser(): List<SavedUserModel>

@Query("DELETE FROM SavedShoppingListModel WHERE id LIKE :id")
fun deleteById(id: String)

2 个答案:

答案 0 :(得分:1)

您可以从删除或更新中返回Int。该值将是受影响的行数。通过简单的编程调用return后,您就知道该方法的执行已经完成。检查this主题以了解更多,投票最多的答案。

或者,您可以使用Room + RxJava并返回Completable并在onComplete方法中查找完成时的状态。这是IMO的更佳解决方案。但是,我猜第一种解决方案也可以。

我认为,如果您还从选择查询中返回LiveData<List<T>>,则可以从房间中检测到您的删除。不太确定最后一个。

编辑:正如@CommonsWare在评论中提到的,您的另一个选择是协程。将方法标记为suspend,然后转到此答案的第1段。

答案 1 :(得分:0)

您可以这样更新查询:

@Query("SELECT * FROM SavedUserModel")
fun getUser():Observable<List<SavedUserModel>>
/*or use Single if it's a one time thing*/

然后在viewModel或您的逻辑去处

getUser()
.subscribeOn(Schedulars.io())
.observeOn(AndroidSchedulars.mainThread())
.subscribe(
{
/*query succeed you have the List<SavedUserModel> as it*/
},{
/*query failed , you have throwable as it*/
})

您还可以使用onSuccessonError,但您也需要同时拨打subscribe

希望有帮助。