如何从BehaviorSubject获取最新值?

Kon*_*ski 5 java android reactive-programming rx-java rx-android

我怎样才能检索最新的值BehaviorSubjectRxAndroid

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

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

我怎么做?

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

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

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

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

手头上还有什么东西吗?

Kon*_*ski 3

事实证明,其背后的原因是 RxAndroid 默认依赖于 RxJava 1.0.4,其中主题尚未getValue公开hasValue

感谢@akarnokd 帮助我认识到这一点。

事实证明,解决该问题所需要做的就是手动添加对最新版本 RxJava 的依赖项与build.gradle. 截至目前,这将是:

compile 'io.reactivex:rxandroid:0.24.0'
compile 'io.reactivex:rxjava:1.0.11'
Run Code Online (Sandbox Code Playgroud)

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