我想在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)
答案 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*/
})
您还可以使用onSuccess
和onError
,但您也需要同时拨打subscribe
。
希望有帮助。