在RxJava 2中创建Observable的最佳方法是能够将发射器用于mvvm

时间:2018-02-27 17:57:01

标签: android mvvm kotlin observable rx-java2

我的目的是创建一个可以在类中发出项目的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异常)?

感谢。

1 个答案:

答案 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 -> ...
        })
}