Невозможно создать Observable в Котлине - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать Observable в kotlin. Но его ошибка выдачи неразрешенная ссылка на метод 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()
            }
        })

Чтоя делаю неправильно? Как я могу создать Observable?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Если вы хотите сами контролировать выброс предметов, вы можете создать Observable с помощью .create метода, например,

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

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

Но в этом случае вам придется вызвать onNext, onComplete, onError по своему усмотрению.

Но если вы хотите гораздо более простое решение, вы можете создать его как

Observable.just(1)

Observable.fromCallable { 1 }
0 голосов
/ 25 июля 2019

Я не знаю, используете ли вы компоненты архитектуры, но если я хочу наблюдать за 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 ->

        })
0 голосов
/ 22 октября 2018

Простой пример с ObservableEmitter

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

        it.onComplete()
    }
...