Looking for rx-java Answers? Try Ask4KnowledgeBase
Looking for rx-java Keywords? Try Ask4Keywords

rx-javaНачало работы с rx-java


замечания

В этом разделе представлен общий обзор и поверхностное введение в rx-java.

RxJava - это реализация виртуальных расширений Java VM: библиотека для составления асинхронных и основанных на событиях программ с использованием наблюдаемых последовательностей.

Узнайте больше о RxJava в Wiki Home .

Версии

Версия Статус Последняя стабильная версия Дата выхода
1.x стабильный 1.3.0 2017-05-05
2.x стабильный 2.1.1 2017-06-21

Введение в RxJava

Основные понятия RxJava являются его Observables и Subscribers . Observable испускает объекты, а Subscriber их потребляет.

наблюдаемый

Observable - класс, который реализует реактивный шаблон дизайна. Эти Observables предоставляют методы, позволяющие потребителям подписываться на изменения событий. Наблюдаемые изменения события инициируются. Нет ограничений на количество подписчиков, которое может иметь Observable , или количество объектов, которое может наблюдаться Observable .

Возьмем, к примеру:

Observable<Integer> integerObservable = Observable.just(1, 2, 3); // Integer observable
Observable<String> stringObservable = Observable.just("Hello, ", "World", "!"); // String observable
 

Здесь, наблюдаемый объект , называемый integerObservable и stringObservable создается из фабричного метода just при условии библиотеки Rx. Обратите внимание, что Observable является общим и может, таким образом, испускать любой объект.

подписчик

Subscriber - это потребитель. Subscriber может подписаться только на один наблюдаемый. Observable вызывает onNext() , onCompleted() и onError() для Subscriber .

Subscriber<Integer> mSubscriber = new Subscriber<Integer>() {
        // NOTE THAT ALL THESE ARE CALLED BY THE OBSERVABLE
        @Override
        public void onCompleted() {
            // called when all objects are emitted
            System.out.println("onCompleted called!");
        }

        @Override
        public void onError(Throwable throwable) {
            // called when an error occurs during emitting objects
            System.out.println("onError called!");
        }

        @Override
        public void onNext(Integer integer) {
            // called for each object that is emitted
            System.out.println("onNext called with: " + integer);
        }
    };
 

Обратите внимание, что Subscriber также является общим и может поддерживать любой объект. Subscriber должен подписаться на наблюдаемый, вызвав метод subscribe на наблюдаемый.

integerObservable.subscribe(mSubscriber);
 

Вышеприведенный при запуске будет производить следующий вывод:

onNext called with: 1
onNext called with: 2
onNext called with: 3
onCompleted called!
 

Привет, мир!

Следующее выводит сообщение Hello, World! утешить

public void hello() {
  Observable.just("Hello, World!") // create new observable
    .subscribe(new Action1<String>() { // subscribe and perform action

       @Override
       public void call(String st) {
         System.out.println(st);
       }

    });
}
 

Или используя Java 8 лямбда-нотацию

public void hello() {
      Observable.just("Hello, World!") // create new observable
        .subscribe(onNext -> { // subscribe and perform action
             System.out.println(onNext);   
        });
}
 

Установка или настройка

Настройка rx-java

  1. Gradle

    compile 'io.reactivex:rxjava2:rxjava:2.1.1'
     
  2. специалист

    <dependency>
        <groupId>io.reactivex.rxjava2</groupId>
        <artifactId>rxjava</artifactId>
        <version>2.1.1</version>
    </dependency>
     
  3. плющ

    <dependency org="io.reactivex.rxjava2" name="rxjava" rev="2.1.1" />
     
  4. Снимки от JFrog

    repositories {
    maven { url 'https://oss.jfrog.org/libs-snapshot' }
    }
    
    dependencies {
        compile 'io.reactivex:rxjava:2.0.0-SNAPSHOT'
    }
     
  5. Если вам нужно загрузить банки вместо того , чтобы использовать систему сборки, создать Maven pom файл , как это с нужной версии:

    <?xml version="1.0"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.netflix.rxjava.download</groupId>
        <artifactId>rxjava-download</artifactId>
        <version>1.0-SNAPSHOT</version>
        <name>Simple POM to download rxjava and dependencies</name>
        <url>http://github.com/ReactiveX/RxJava</url>
        <dependencies>
            <dependency>
                <groupId>io.reactivex</groupId>
                <artifactId>rxjava</artifactId>
                <version>2.0.0</version>
                <scope/>
            </dependency>
        </dependencies>
    </project>
     

Затем выполните:

$ mvn -f download-rxjava-pom.xml dependency:copy-dependencies
 

Эта команда загружает rxjava-*.jar и ее зависимости в ./target/dependency/.

Вам нужна Java 6 или более поздняя.

Понимание мраморных диаграмм

Наблюдаемый можно рассматривать как просто поток событий. Когда вы определяете Observable, у вас есть три прослушивателя: onNext, onComplete и onError. onNext будет вызываться каждый раз, когда наблюдаемое приобретает новое значение. onComplete будет вызываться, если родительский Observable уведомит, что он завершил создание каких-либо других значений. onError вызывается, если исключение вызывается в любое время во время выполнения цепи Observable. Чтобы показать операторов в Rx, мраморная диаграмма используется для отображения того, что происходит с конкретной операцией. Ниже приведен пример простого наблюдаемого оператора «Just».

Пример мраморной диаграммы

Мраморные диаграммы имеют горизонтальный блок, который представляет выполняемую операцию, вертикальную полосу для представления завершенного события, X для представления ошибки, а любая другая форма представляет значение. Имея это в виду, мы можем видеть, что «Just» просто возьмет наше значение и сделает onNext, а затем закончит с onComplete. Есть намного больше операций, затем просто «Just». Вы можете увидеть все операции, которые являются частью проекта ReactiveX, а также реализации в RxJava на сайте ReativeX . Существуют также интерактивные мраморные диаграммы через сайт RxMarbles .