我正在使用会议室数据库来存储评论,并使用RxJava作为监听器,在数据库发生变化时做一些事情。
我想在表上调用delete时不调用回调,只有在调用insert时才会调用。
我到目前为止发现的是,房间图书馆的triggers
被delete
,insert
和update
调用,后者又称为RxJava&#39 ;方法。
有没有办法放弃delete
触发器并仅针对insert
和update
方法获得回调?
这是我的评论DAO:
@Query("SELECT * FROM comments" )
fun getAll(): Flowable<List<Comment>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(comment: Comment)
@Delete
fun delete(comment: Comment)
我的RxJava回调函数:
/**
* Inserts comment into comment database
*
* @param object that's going to be inserted to the database
*/
fun saveComment(comment: Comment) {
Observable.just(comment).subscribeOn(Schedulers.io()).map({ comment1 -> commentdb.commentDao().insert(comment1) }).subscribe()
}
/**
* Removes comment from the database
*
* @param comment object that's going to be removed
*/
fun removeComment(comment: Comment){
Observable.just(comment).subscribeOn(Schedulers.io()).map({ comment1 -> commentdb.commentDao().delete(comment1) }).subscribe()
}
fun createCommentObservable(uploader: CommentUploader) {
commentdb.commentDao().getAll().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(
{
success -> uploader.queue(success)
}
)
}
答案 0 :(得分:1)
您可以通过过滤原始Flowable<List<Comment>>
getAll()
来获取仅在插入而非删除时发出的Flowable
,以便只传递包含List<Comment>
项的Comment
项比之前的List<Comment>
更多RxJava
。
您可以使用以下转换实现此过滤:
window()
window()
,以便我们能够比较相邻的项目。Flowable<Flowable<Comment>>
返回Flowable<List<Comment>>
。将内容flatMap()
上的toList()
和Flowable
转换为fun getAllAfterInsertions() {
getAll()
.startWith(emptyList<String>()) // (1)
.window(2, 1) // (2)
.flatMap({ w -> w.toList().toFlowable() }) // (3)
.filter({ w -> w.size == 2 && w[0].size < w[1].size }) // (4)
.map({ window -> window[1] }) // (5)
}
。在Kotlin:
return redirect('vendors')->with('vendor',$allvendors);
答案 1 :(得分:0)
要删除而没有通知,我只需替换
MyDao().delete()
其中一个执行@Query
MyDao().deleteLast()
然后,Flowable不会发出新事件。 @Dao看起来像这样
@Dao
abstract class MyDao : BaseDao<Data> {
@Query("DELETE FROM Data WHERE id = (select min(id) from Data)") // or something else
abstract fun deleteLast()
@Delete
fun delete(data: Data)
}