【问题标题】:Unable to create Observable in Kotlin无法在 Kotlin 中创建 Observable
【发布时间】:2018-10-22 11:26:57
【问题描述】:

我正在尝试在 kotlin 中创建 Observable。但是它在 OnSubscribe 方法上给出错误未解决的引用

  fun getDisposableObserver(): Observable<Background> {

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

这个sn-p我试过了,还是不行

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

                subscriber.onCompleted()
            }
        })

我做错了什么?,如何创建 Observable?

【问题讨论】:

标签: android kotlin rx-java2 rx-android


【解决方案1】:

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

    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 }

【讨论】:

  • 赞成,但第一种方法的首选风格是省略括号
【解决方案2】:

使用 ObservableEmitter 的简单示例

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

        it.onComplete()
    }

【讨论】:

    【解决方案3】:

    我不知道您是否使用架构组件,但如果我想观察背景,我认为 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 ->
    
            })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-26
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多