Краткая памятка по источникам данных в RxJava2. Мало, чётко, по делу.

Observable

Стандартный источник данных. Не поддерживает backpressure.

Observable.range(1, 3).subscribe(
        { data -> Log.d("RXJAVALOG", "Observable onNext: $data") },
        { error -> Log.d("RXJAVALOG", "Observable onError: ${error.message}") },
        { Log.d("RXJAVALOG", "Observable completed") },
        { disposable -> Log.d("RXJAVALOG", "Observable onSubscribe: ${disposable.isDisposed}") }
)

При желании можно отписаться по disposable.dispose()

Flowable

То же, но с поддержкой backpressure:

Flowable.range(1, 3).subscribe(
        { data -> Log.d("RXJAVALOG", "Flowable onNext: $data") },
        { error -> Log.d("RXJAVALOG", "Flowable onError: ${error.message}") },
        { Log.d("RXJAVALOG", "Flowable completed") },
        { subscription -> subscription.request(Long.MAX_VALUE) }
)

Single

Получает один блок данных, без всяких onNext:

Single.just("single data").subscribe(
        { data -> Log.d("RXJAVALOG", "Single onSuccess: $data") },
        { error -> Log.d("RXJAVALOG", "Single onError: ${error.message}") }
)

Completable

Запускает что-то на выполнение и ждёт результат. Обновление данных на сервере, запись в базу и всякое такое:

Completable.timer(1, TimeUnit.SECONDS).subscribe(
        { Log.d("RXJAVALOG", "Completable completed") },
        { error -> Log.d("RXJAVALOG", "Completable onError: ${error.message}") }
)

Maybe

Помесь Single и Completable. Если что-то вернулось — отлично, отдаётся в onSuccess. Ничего не вернулось — просто выполняем код в onComplete:

// С данными
Maybe.just("single data").subscribe(
        { data -> Log.d("RXJAVALOG", "Maybe 1 onSuccess: $data") },
        { error -> Log.d("RXJAVALOG", "Maybe 1 onError: ${error.message}") },
        { Log.d("RXJAVALOG", "Maybe 1 completed") }
)

// Без данных
Maybe.empty<String>().subscribe(
        { data -> Log.d("RXJAVALOG", "Maybe 2 onSuccess: $data") },
        { error -> Log.d("RXJAVALOG", "Maybe 2 onError: ${error.message}") },
        { Log.d("RXJAVALOG", "Maybe 2 completed") }
)

Добавить комментарий

Закрыть меню