如何从RxAndroid上检索BehaviorSubject
的最新值?
一些背景信息:我使用RxJava实现MVVM模式。我的ViewModel封装了BehaviorSubject
的"可绑定属性"。我将它们作为可观察对象绑定到UI元素,以确保界面不断更新(并且由于使用BehaviorSubject
,即使在设置值之后发生订阅也会发生)。
我仍然希望能够访问最新的(实际的)属性的"原始"值,用于业务逻辑。
我该怎么做?
BehaviorSubject
肯定会以某种方式缓存它,因为它会为订阅它的人重新发布最新的值。
然而BehaviorSubject.last()
只返回Observable<T>
,并且它似乎没有暴露任何T
返回类型的方法。
我知道我可以自己缓存它,但它感觉多余。
我想我也可以在getter中创建一个一次性订阅,只获取它的最新值,然后将它返回给调用代码,但这似乎很笨拙。
手头有更整洁的吗?
事实证明,背后的原因是RxAndroid默认依赖于RxJava 1.0.4,其中Subjects尚未公开getValue
和hasValue
。
感谢@akarnokd帮我意识到这一点。
事实证明,解决这个问题所需要的就是在build.gradle
中手动添加对最新版本RxJava的依赖,同时添加对RxAndroid的依赖。现在应该是:
compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.11'
见https://github.com/ReactiveX/RxAndroid/issues/171
如果使用blockingGet()
将会很有帮助
subject.onNext(subject.blockingLast(null))