RXKotlin-如何接收单个事件

问题描述

我有时两次从某个对象获取回调事件,但是我只需要收集一个将成为最新对象的对象。 RX kotlin是否可以?

解决方法

如果内容不同

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,data)
}
,

如果您的观察对象发射多次,但是您只需要最新一次,则可以使用Observable.blockingLast()来获取该项目,而忽略其余的项目。

类似地,您可以使用Observable.blockingFirst()来获得第一个结果。

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

,

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

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