我是反应性世界的新手,所以如果我说的是错误的话,请多包涵(请纠正我!)。
所以我在google和这里搜索相似的东西,但是我认为我所做的事情还没有出现。我正在使用Rx2Firebase库通过RxFirebaseDatabase.observeSingleValueEvent
方法从数据库中获取一些数据,而我无法解决如何处理我制作的Observable。因此,此方法返回一个Maybe,我想在执行我的代码后处置该Maybe,但是我不确定如何(在下面继续阅读为什么)。
我当前的代码如下:
private fun getUserStatus(callback: () -> Unit) {
RxFirebaseDatabase
.observeSingleValueEvent(myQuery,(entry::class.java))
.subscribe ({ item
myEntry = item
callback()
},{ e
Log.e("Error", e.message)
})
}
根据我的阅读,可观察变量被分配给一个Disposable
变量,然后我认为该变量将被处置? var disposable: Disposable = <Insert my code above for calling Firebase>
之类的东西,您将在onDestroy
中这样做(根据我的阅读)。我的问题是,如果我的代码未在Activity或Fragment中执行,该怎么办?我不能只在dispose()
之后的代码末尾添加.subscribe
,因为那样会在调用结束之前结束调用。
答案 0 :(得分:1)
代码执行后,您无需处置Maybe
。每当需要取消基础操作时,就应该处置任何可观察的对象。由于您使用的是Android,因此该操作是从某些生命周期感知的组件中触发的。这可以是Activity
,Fragment
或Service
。如果您从BroadcastReceiver
触发呼叫,则应该启动服务来代替。
对于这些组件中的任何组件,您都可以使用方法onDestroy
来处理可观察对象。您唯一需要确定的就是将Disposable
传播到这一级别:
private fun getUserStatus(callback: () -> Unit): Disposable =
RxFirebaseDatabase
.observeSingleValueEvent(myQuery,(entry::class.java))
.subscribe ({ item ->
myEntry = item
callback()
},{ e ->
Log.e("Error", e.message)
})