LoginSignup
0
0

RxJavaの中心的な概念「Observable」について理解する

Last updated at Posted at 2023-09-03

Observable とは

ObservableはRxJavaの中心的なクラスで、ある一連のデータまたはイベントを非同期で発行するオブジェクトです。このObservableが発行するデータを受け取る側のことをObserverといいます。
イメージ的には、Observableは放送局のようなもので、Observerはテレビの受信機のようなものです。

Observable の基本的な動作

  1. onNext: Observableは0回以上onNextを呼び出してデータをObserverに送信します。
  2. onError: エラーが発生した場合、Observableはこのメソッドを呼び出してエラーを通知します。このメソッドが呼び出されたあと、他のメソッドは呼び出されません。
  3. onComplete: Observableがもうこれ以上データを発行しないことをObserverに通知するためにこのメソッドを呼び出します。このメソッドが呼び出されたあと、他のメソッドは呼び出されません。

Observable の簡単な例

Observable<String> observable = Observable.create(emitter -> {
    emitter.onNext("Item 1");
    emitter.onNext("Item 2");
    emitter.onComplete();
});

Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String item) {
        System.out.println(item);
    }

    @Override
    public void onError(Throwable e) {
        System.err.println("Error occurred!");
    }

    @Override
    public void onComplete() {
        System.out.println("Done!");
    }
};

observable.subscribe(observer);

実行結果

Item 1
Item 2
Done!

この例では、ObservableItem 1Item 2という二つのデータを発行しており、それをObserverが受け取っています。最後にObservableは完了を通知しています。

補足

なぜ各メソッドをオーバーライドしているのか?

Observerはインターフェースです。そして、そのインターフェースにはonNext, onError, onCompleteという3つの抽象メソッドが定義されています。これらのメソッドはObservableがデータやイベントを発行するときに呼び出されます。

具体的な動作を知りたいので、このインターフェースを実装する際にこれらのメソッドをオーバーライドします。つまり、具体的にonNextが呼び出されたときに何をするか、onErrorが呼び出されたときにどのようなエラーハンドリングをするかなどを定義します。

observable.subscribe(observer);はなんのための処理なのか?

observable.subscribe(observer);は、Observer(データの受信側)Observable(データの送信側)に登録するイメージです。これにより、Observableがデータやイベントを発行するたびに、Observerの対応するメソッド(onNext, onError, onComplete)が呼び出されるようになります。

簡単に言うと、subscribeメソッドはObserverをテレビ放送の受信機に「登録」するようなものです。この「登録」をすることで、放送局が放送を開始したら、登録された受信機でその放送内容を受け取ることができるようになります。

まとめると、Observerのインスタンスを作成してそのメソッドをオーバーライドすることで、データ受信時の具体的な動作を定義します。そして、subscribeメソッドを使用して、そのObserverObservableに「登録」することで、データの受信が開始されます。

まとめ

  • Observableはデータのソース。データを非同期に発行する。
  • Observerはデータの消費者。Observableからデータを受け取る。
  • ObservableObserverはRxJavaの非同期データフローを形成します。

難しい〜

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0