如何从BehaviorSubject获取最新值?

时间:2015-06-06 18:44:23

标签: java android reactive-programming rx-java rx-android

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

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

我仍然希望能够访问最新的(实际的)" raw"业务逻辑的属性值。

我该怎么做?

肯定BehaviorSubject以某种方式缓存它,因为它会为订阅它的人重新发布最新值。

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

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

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

手头上还有什么东西吗?

2 个答案:

答案 0 :(得分:2)

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

感谢@akarnokd帮助我实现这一点。

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

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

请参阅https://github.com/ReactiveX/RxAndroid/issues/171

答案 1 :(得分:0)

如果您使用blockingGet()

subject.onNext(subject.blockingLast(null))