如何从BehaviorSubject获取最新值?

问题描述 投票:5回答:2

如何在BehaviorSubject上从RxAndroid中检索最新值?

一些背景信息:我正在使用RxJava来实现MVVM模式。我的ViewModel封装了BehaviorSubjects的“可绑定属性”。我将它们绑定到UI元素作为可观察对象,确保界面不断更新(并且由于使用BehaviorSubject,即使订阅在设置值之后发生也会发生)。

对于业务逻辑,我仍然希望能够访问属性的最新(实际)“原始”值。

我怎么做?

当然BehaviorSubject以某种方式缓存它,因为它重新发布了订阅它的人的最新价值。

然而BehaviorSubject.last()只返回一个Observable<T>,它似乎没有暴露任何T返回类型的方法。

我知道我可以自己缓存它,但感觉多余。

我想我也可以在我的getter中创建一个抛弃订阅,只是为了获取它的最新值然后将它返回到调用代码,但这看起来很笨重。

手头还有什么东西吗?

java android reactive-programming rx-java rx-android
2个回答
2
投票

事实证明,背后的原因是默认情况下RxAndroid依赖于RxJava 1.0.4,其中Subjects尚未暴露getValuehasValue

感谢@akarnokd让我意识到这一点。

事实证明,解决问题所需的只是在build.gradle中手动添加对RxAnd的最新版本的依赖与RxAndroid依赖关系。截至目前,这将是:

compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.11'

https://github.com/ReactiveX/RxAndroid/issues/171


0
投票

如果你使用blockingGet()会很有帮助

subject.onNext(subject.blockingLast(null))
© www.soinside.com 2019 - 2024. All rights reserved.