你好,我想问一下rxJava和Room。
这是我房间里的道:
@Query("SELECT * from `Order` WHERE id = :ID")
fun findOrderById(ID: Int): Flowable<Order>
这是调用Dao的代码:
mDB.orderDataDao().findOrderById(orderId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
if (it.deliveryStatus == EnumOrder.IN_DELIVERY.name) {
mView.orderInProgress()
mView.setOrderFromDB(it, true)
} else {
mView.noOrderInProgress()
mView.setOrderFromDB(it, false)
}
}
我的问题是为什么在调用Dao时会出现警告“ rxjava上未使用subscribe的结果”。为什么会发生这种情况以及我该如何做对?我在使用rxJava的每个代码中都得到了警告。
答案 0 :(得分:1)
subscribe()
应该返回一个Disposable
,以后您可以使用它注销您从Flowable
接收更新的兴趣。要消除此警告,请将订阅中返回的Disposable存储在实例变量中,并将其与生命周期一起使用以取消订阅更新。例如:
val disposable = mDB.orderDataDao().findOrderById(orderId).subscribe { /**/ }
//...
disposable.dispose();
答案 1 :(得分:1)
或在您的演示者中创建CompositeDisposable
,然后在其中添加每个一次性对象。然后在onDestroy()
中调用compositeDisposable.dispose()
。