我的目的是创建一个可以在类中发出项目的Observable。
我的目标是创建一个ViewModel,它可以将流公开给Android中的View,反应性地传递项目。
我的方法如下:
class MyMVVM {
private lateinit var timeSelectedEmitter: ObservableEmitter<Int>
val timeSelectedObservable: Observable<Int> = Observable.create { emitter -> timeSelectedEmitter = emitter }
}
理论上,据我所知,这应该让我可以访问发射器,然后可以在任何时候调用它来向timeSelectedObservable的订户提供时间事件(在View中的订户)< / p>
1)这是一种正确的方法还是应该以另一种方式完成?
2)是否有办法在Observable创建时创建发射器,而不是在订阅者订阅Observable时(以避免nullpointer异常或Kotlin异常)?
感谢。
答案 0 :(得分:1)
我通常创建一次Observable并将相同的Observable返回给想要订阅它的任何东西。这样,如果有多个订阅者,则每次都不需要创建新的Observable。
类似于:
class ViewModel {
private val timeObservable = PublishSubject.create<Int>()
fun timeObservable(): Observable<Int> = timeObservable
fun update() {
// ...
timeObservable.onNext(time)
}
}
class Activity {
...
viewModel.timeObservable()
.subscribe {
time -> ...
})
}