Как заменить одноразовые на наблюдаемые - PullRequest
0 голосов
/ 14 мая 2019

Я новичок в RxJava.

Первое, что я узнал, это то, что Шаблон наблюдателя состоит из двух компонентов (среди прочих): Наблюдаемые и Наблюдатели

В приведенном ниже коде что такое Observable и что такое Observer?

class JsonRepository{

private val client by lazy {
    Retrofit.Builder()
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create())
        .baseUrl("https://jsonplaceholder.typicode.com/")
        .build()
        .create(JsonApi::class.java)
}

var disposable: Disposable? = null
var allArticles: List<Article> = emptyList()


fun loadJson(){
    disposable = client.getAllArticles()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(
            { result -> allArticles = result },
            { error -> Log.e("ERROR", error.message) }
        )
}

}

Кроме того, как я могу изменить свой код, чтобы я мог использовать Observable или Flowable вместо Disposable

1 Ответ

1 голос
/ 14 мая 2019

Наблюдаемый

Проверьте, что возвращают все вещи в цепочке client.getAllArticles(), .subscribeOn(Schedulers.io()), .observeOn(AndroidSchedulers.mainThread()).Каждый из этих трех вызовов возвращает Observable (до или после некоторого преобразования).

Последним в цепочке (результат .observeOn(AndroidSchedulers.mainThread())) является возможный Observable, который используетсявами.

Observable

Это то, что будет наблюдаться Observer.


Observer

С RxJava docs :

Метод Subscribe - это способ подключения наблюдателя к Observable.Ваш наблюдатель реализует некоторое подмножество следующих методов:

onNext [...]

onError [...]

onCompleted [...]


Вопрос

Кроме того, как я могу изменить свой код, чтобы я мог использовать Observable или Flowable вместоОдноразовые

Обычно вы просто выставляете Observable и позволяете "пользователю" из репозитория создавать Observer и управлять Disposable (хук для записи записей о подписанных Observers).Так вот как-то так (не проверял, списывая с головы до головы):

fun loadJson() : Observable<Article> = client.getAllArticles().subscribeOn(Schedulers.io())

(observeOn действительно для Observer)

...