订阅的结果未在rxjava上使用

时间:2019-05-03 06:29:29

标签: android rx-java rx-java2 android-room

你好,我想问一下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的每个代码中都得到了警告。

2 个答案:

答案 0 :(得分:1)

subscribe()应该返回一个Disposable,以后您可以使用它注销您从Flowable接收更新的兴趣。要消除此警告,请将订阅中返回的Disposable存储在实例变量中,并将其与生命周期一起使用以取消订阅更新。例如:

val disposable = mDB.orderDataDao().findOrderById(orderId).subscribe { /**/ }

//...

disposable.dispose();

答案 1 :(得分:1)

或在您的演示者中创建CompositeDisposable,然后在其中添加每个一次性对象。然后在onDestroy()中调用compositeDisposable.dispose()