7

如何从RxAndroidBehaviorSubject上检索最新值?

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

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

我怎么做?

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

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

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

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

手头有更整洁的东西吗?

4

2 回答 2

3

事实证明,其背后的原因是 RxAndroid 默认依赖于 RxJava 1.0.4,其中 Subjects 还没有getValue公开hasValue

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

事实证明,解决这个问题所需要的只是手动添加对最新版本 RxJava 的依赖,并在build.gradle. 到目前为止,这将是:

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

https://github.com/ReactiveX/RxAndroid/issues/171

于 2015-06-07T20:08:44.817 回答
0

如果您使用它会很有帮助blockingGet()

subject.onNext(subject.blockingLast(null))
于 2019-04-23T10:27:20.183 回答