如何从行为学中获得最新的价值



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

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

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

我该怎么做?

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

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

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

我想我也可以在getter中创建一个一次性订阅,只获取它的最新值,然后将它返回给调用代码,但这似乎很笨拙。

手头有更整洁的吗?

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

感谢@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))

相关内容

  • 没有找到相关文章

最新更新