首页 > 解决方案 > rxjava 上没有使用 subscribe 的结果

问题描述

您好,我想问一下 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 上使用”。为什么会发生这种情况以及我如何才能做到这一点?我在每个使用 rxJava 的代码中都收到了警告。

标签: androidrx-javarx-java2android-room

解决方案


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

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

//...

disposable.dispose();

推荐阅读