Java 如何从BehaviorSubject获取最新值?
如何从上的Java 如何从BehaviorSubject获取最新值?,java,android,reactive-programming,rx-java,rx-android,Java,Android,Reactive Programming,Rx Java,Rx Android,如何从上的BehaviorSubject检索最新值 一些背景信息:我正在使用RxJava实现MVVM模式。我的ViewModel封装了“可绑定属性”,这些属性是BehaviorSubjects。我将它们作为可观察对象绑定到UI元素,确保界面不断更新(由于使用了BehaviorSubject,即使在设置值后进行订阅,也会发生这种情况) 我仍然希望能够访问最新的(实际的)“原始”财产价值,用于业务逻辑 我该怎么做 当然,BehaviorSubject会以某种方式缓存它,因为它会为订阅它的人重新发布最
BehaviorSubject
检索最新值
一些背景信息:我正在使用RxJava实现MVVM模式。我的ViewModel封装了“可绑定属性”,这些属性是BehaviorSubject
s。我将它们作为可观察对象绑定到UI元素,确保界面不断更新(由于使用了BehaviorSubject
,即使在设置值后进行订阅,也会发生这种情况)
我仍然希望能够访问最新的(实际的)“原始”财产价值,用于业务逻辑
我该怎么做
当然,BehaviorSubject
会以某种方式缓存它,因为它会为订阅它的人重新发布最新的值
然而BehaviorSubject.last()
只返回一个可观察的
,并且它似乎没有公开任何t
返回类型的方法
我知道我可以自己把它藏起来,但感觉有点多余
我想我也可以在getter中创建一个一次性订阅,只是为了获得最新的值,然后将其返回给调用代码,但这看起来很笨拙
有什么更整洁的吗?事实证明,其背后的原因是RxAndroid默认依赖于RxJava 1.0.4,在RxJava 1.0.4中,受试者还没有公开
getValue
或hasValue
感谢@akarnokd帮助我认识到这一点
事实证明,解决这个问题所需要的只是在build.gradle
中手动添加对最新版本RxJava的依赖,并与RxAndroid依赖并排添加。到目前为止,这将是:
compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.11'
请参见如果使用
blockingGet()
看看这个主题本身的hasValue和getValue方法,这是我要找的第一件事;)不幸的是,它没有公开这样的方法,因此question.RxJava从1.0.6开始就有了这些方法:@akarnokd RxAndroid似乎基于RxJava 1.0.4。
subject.onNext(subject.blockingLast(null))