Android 在RXJava2中创建可观察对象的最佳方法是能够将发射器用于mvvm

Android 在RXJava2中创建可观察对象的最佳方法是能够将发射器用于mvvm,android,mvvm,kotlin,observable,rx-java2,Android,Mvvm,Kotlin,Observable,Rx Java2,我的意图是创建一个可观察对象,它可以在类中发出一个项 我的目标是创建一个ViewModel,它可以在Android中向视图公开一个流,以反应方式交付项目 我的做法如下: class MyMVVM { private lateinit var timeSelectedEmitter: ObservableEmitter<Int> val timeSelectedObservable: Observable<Int> = Observable.create { em

我的意图是创建一个可观察对象,它可以在类中发出一个项

我的目标是创建一个ViewModel,它可以在Android中向视图公开一个流,以反应方式交付项目

我的做法如下:

class MyMVVM {
  private lateinit var timeSelectedEmitter: ObservableEmitter<Int> 
  val timeSelectedObservable: Observable<Int> = Observable.create { emitter -> timeSelectedEmitter = emitter }
}
classmymvvm{
私有lateinit var TimeSelectedMitter:ObservableMitter
val timeSelectedObservable:Observable=Observable.create{emitter->timeSelectedEmitter=emitter}
}
理论上,就我目前的理解而言,这应该让我能够访问发射器,然后可以在任何时候调用发射器,将时间事件传递给timeSelectedObservable的订阅者(视图中的订阅者)

1) 这是一种正确的方法,还是应该用另一种方法

2) 有没有一种方法可以在创建可观察对象时而不是在订户订阅可观察对象时创建发射器(以避免nullpointer异常或Kotlin异常)


谢谢。

我通常创建一次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 -> ...
        })
}
类视图模型{
private val timeObservable=PublishSubject.create()
有趣的timeObservable():Observable=timeObservable
趣味更新(){
// ...
可观测时间。onNext(时间)
}
}
课堂活动{
...
viewModel.timeObservable()
.订阅{
时间->。。。
})
}

使用PublishSubject解决了我的问题。非常感谢。我自己也能看到,但有时你在盯着一个问题看太久之后,对简单的解决方案视而不见。