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

所以我在谷歌和这里搜索类似的东西,但是我想我没有看到我所做的任何事情。我正在使用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,因为那样会在调用结束之前结束调用。

最佳答案

执行代码后,您不需要处置Maybe。每当需要取消基础操作时,就应该处置任何可观察的对象。由于您使用的是Android,因此该操作是从某些具有生命周期意识的组件中触发的。这可以是ActivityFragmentService。如果您从BroadcastReceiver触发 call ,则应该启动服务来执行此操作。

对于这些组件中的任何一个,您都可以使用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)
      })

关于kotlin - 在RxAndroid中处置Maybe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56354527/

10-10 16:39