在RxAndroid中处置Maybe

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

标签: kotlin rx-android

我是反应性世界的新手,所以如果我说的是错误的话,请多包涵(请纠正我!)。

所以我在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,因为那样会在调用结束之前结束调用。

1 个答案:

答案 0 :(得分:1)

代码执行后,您无需处置Maybe。每当需要取消基础操作时,就应该处置任何可观察的对象。由于您使用的是Android,因此该操作是从某些生命周期感知的组件中触发的。这可以是ActivityFragmentService。如果您从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)
      })