Observable とは
Observable
はRxJavaの中心的なクラスで、ある一連のデータまたはイベントを非同期で発行するオブジェクトです。このObservable
が発行するデータを受け取る側のことをObserver
といいます。
イメージ的には、Observable
は放送局のようなもので、Observer
はテレビの受信機のようなものです。
Observable の基本的な動作
-
onNext:
Observable
は0回以上onNext
を呼び出してデータをObserver
に送信します。 -
onError: エラーが発生した場合、
Observable
はこのメソッドを呼び出してエラーを通知します。このメソッドが呼び出されたあと、他のメソッドは呼び出されません。 -
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!
この例では、Observable
はItem 1
とItem 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
メソッドを使用して、そのObserver
をObservable
に「登録」することで、データの受信が開始されます。
まとめ
-
Observable
はデータのソース。データを非同期に発行する。 -
Observer
はデータの消費者。Observable
からデータを受け取る。 -
Observable
とObserver
はRxJavaの非同期データフローを形成します。
難しい〜