无法在Koltin中创建Observable

时间:2018-10-22 11:26:57

标签: android kotlin rx-java2 rx-android

我正在尝试在kotlin中创建Observable,但是在OnSubscribe方法上未解决其给定错误

  fun getDisposableObserver(): Observable<Background> {

        return Observable.create(object :Observable.OnSubscribe<Background> ->{})
    }

我尝试了此代码段。它也无效

  Observable.create(object : ObservableOn.OnSubscribe<Int> {
            override fun call(subscriber: Subscriber<in Int>) {
                for(i in 1 .. 5)
                    subscriber.onNext(i)

                subscriber.onCompleted()
            }
        })

我做错了什么?如何创建可观察的?

3 个答案:

答案 0 :(得分:4)

如果您想自己控制物品的发射,可以使用Observable方法创建一个.create,就像这样

    Observable.create({ e: ObservableEmitter<String> -> e.onNext("") })

    Observable.create(object: ObservableOnSubscribe<String> {
        override fun subscribe(e: ObservableEmitter<String>) {
            e.onNext("")
        }
    })

但是在这种情况下,您将必须自己呼叫onNextonCompleteonError

但是,如果您想要更简单的解决方案,则可以像这样创建它

Observable.just(1)

Observable.fromCallable { 1 }

答案 1 :(得分:1)

带有ObservableEmitter的简单示例

    val obs = Observable.create<Int> {
        for(i in 1 .. 5)
            it.onNext(i)

        it.onComplete()
    }

答案 2 :(得分:0)

我不知道您是否正在使用Architecture Components,但是如果我想观察Background,我认为MutableLiveData和LiveData可以提供帮助

private val _background = MutableLiveData<Background>()
val background: LiveData<Background> = _background

fun editBackground(newBackground : Background) {
   _background.postValue(newBackground)
}

将此代码放在ViewModel或Presenter中。 然后,您可以在视图(活动/片段)中以这种方式观察背景

viewModel.background.observe(this, Observer { newValue ->

        })