如何从 BehaviorSubject 获取最新值?
How to get latest value from BehaviorSubject?
如何在 RxAndroid 上检索 BehaviorSubject
的最新值?
一些背景信息:我正在使用 RxJava 来实现 MVVM 模式。我的 ViewModel 封装了 "bindable properties" 即 BehaviorSubject
。我将它们作为可观察对象绑定到 UI 元素,确保界面不断更新(并且由于使用 BehaviorSubject
,即使在设置值之后进行订阅,它也会发生)。
我仍然希望能够访问 属性 的最新(实际)"raw" 值以用于业务逻辑。
我该怎么做?
肯定 BehaviorSubject
以某种方式缓存它,因为它会为订阅它的人重新发布最新值。
然而 BehaviorSubject.last()
只有 return 一个 Observable<T>
,而且它似乎没有公开任何 T
return 类型的方法。
我知道我可以自己缓存它,但感觉多余。
我想我也可以在我的 getter 中创建一个一次性订阅,只是为了获得最新的值,然后 return 它到调用代码,但这看起来很笨拙。
手头有没有更整洁的东西?
事实证明,其背后的原因是 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'
如果你使用blockingGet()
会很有帮助
subject.onNext(subject.blockingLast(null))
如何在 RxAndroid 上检索 BehaviorSubject
的最新值?
一些背景信息:我正在使用 RxJava 来实现 MVVM 模式。我的 ViewModel 封装了 "bindable properties" 即 BehaviorSubject
。我将它们作为可观察对象绑定到 UI 元素,确保界面不断更新(并且由于使用 BehaviorSubject
,即使在设置值之后进行订阅,它也会发生)。
我仍然希望能够访问 属性 的最新(实际)"raw" 值以用于业务逻辑。
我该怎么做?
肯定 BehaviorSubject
以某种方式缓存它,因为它会为订阅它的人重新发布最新值。
然而 BehaviorSubject.last()
只有 return 一个 Observable<T>
,而且它似乎没有公开任何 T
return 类型的方法。
我知道我可以自己缓存它,但感觉多余。
我想我也可以在我的 getter 中创建一个一次性订阅,只是为了获得最新的值,然后 return 它到调用代码,但这看起来很笨拙。
手头有没有更整洁的东西?
事实证明,其背后的原因是 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'
如果你使用blockingGet()
subject.onNext(subject.blockingLast(null))