【问题标题】:RXKotlin - How to receive single eventRXKotlin - 如何接收单个事件
【发布时间】:2020-10-09 02:36:34
【问题描述】:

我从一个对象获得了两次回调事件,有时三次,但我只需要收集一个将是最新的对象。 RX kotlin 可以吗?

【问题讨论】:

  • 你能提供一些你所做的代码吗?

标签: android kotlin rx-java rx-kotlin2


【解决方案1】:

如果内容不同

Observable.create<String> {
    it.onNext("One")
    it.onNext("Two")
    it.onComplete()
}
.lastOrError()
.subscribe { data, error ->
    Log.d("Log", data)
}

如果内容相同

Observable.create<String> {
    it.onNext("One")
    it.onNext("One")
    it.onComplete()
}
.distinctUntilChanged()
.subscribe {
    Log.d("Log", it)
}

或者将它们组合在一起:

Observable.create<String> {
    it.onNext("One")
    it.onNext("Two")
    it.onNext("Two")
    it.onNext("Two")
    it.onComplete()
}
.distinctUntilChanged()
.lastOrError()
.subscribe { data, error ->
    Log.d("Log", data)
}

【讨论】:

    【解决方案2】:

    如果您的 observable 多次发射,但您只需要最新的,那么您可以使用 Observable.blockingLast() 获取该项目并忽略其余部分。

    同样,您可以使用Observable.blockingFirst() 只获得第一个结果。

    注意,这两个都会阻塞当前线程。

    【讨论】:

      【解决方案3】:

      Single 的行为类似于 Observable,除了它只能发出单个成功值或错误(没有像 Observable 那样的“onComplete”通知)。

              Single.create<String> {
                  it.onSuccess("one")
                  it.onSuccess("two")
                  it.onSuccess("three")
              }.subscribe(
                  {
      //            ON Succuess
                  },
                  {
      // on error
                  }
              )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多