fbpx

Course Content

Total learning: 16 lessons Time: 1 week

Основные понятия. Observable vs Observer

Для программирования на RxJava необходимо понять два базовых понятия: Observer и Observable. 

Светофор – это пример Observable

Для начала, рассмотрим конкретный пример из жизни. Вы едете на машине и видите светофор, горящий красным цветом. Соответственно, вы останавливаетесь и ждете, пока не загорится зеленый. Таким образом, вы ждете событие – зеленый свет. Как только загорается зеленый – вы едете. В этом сравнении – цвета от светофора – это события, и вы (как и ваша программа) реагирует на события соответствующе.

В RxJava все является потоком событий

Observables и Observer
Базовыми строительными блоками реактивного кода являются Observables и Observer. Observable – является источником данных, а Observer — потребителем.

Светофор (генерирующий разные цветовые сигналы) – это Observable (это источник данных), а водитель или пешеход – это Observer (получает события и реагирует).

Порождение данных через Observable всегда происходит в соответствии с одним и тем же порядком действий: Observable «излучает» некоторое количество данных (в том числе, Observable может ничего и не излучать), и завершает свою работу — либо успешно, либо с ошибкой. 

Для каждого  Observer, подписанного на Observable, вызывается метод Observer.onNext() для каждого элемента потока данных, после которого может быть вызван как onComplete(), так и onError().

В примере со светофором – каждый раз, когда сменяется цвет светофора – вы как наблюдатель, получаете информацию о том что сигнал поменялся, то есть был вызван метод onNext() в который пришел сигнал – цвет светофора.

Если же светофор сломается (например в случае отключения электричества) – то вы увидите что он не работает – то есть произойдет вызов метода onError

Observer – это интерфейс, который необходимо реализовать каждый раз, когда мы подписываемся на Observable для получения данных.

public interface Observer<T> {

    void onSubscribe(@NonNull Disposable d);

    void onNext(@NonNull T t);

    void onError(@NonNull Throwable e);

    void onComplete();
}

Этот интерфейс имеет 4 метода

  1. onSubscribe() – вызывается когда мы подписались на получение данных
  2. onNext() – вызывается каждый раз, когда происходит событие/приходят данные
  3. onError() – вызывается, когда произошла ошибка
  4. onComplete() – вызывается когда событий больше не будет

Примеры источников данных в приложении могут быть:

  1. Сетевой запрос, который возвращает данные от сервера.
  2. Запрос в базу данных.
  3. Кнопка или EditText тоже могут быть источниками данных, и оповещать о действиях пользователя.

В следующем уроке мы рассмотрим как создавать источник данных Observable.