woshidan's blog

あいとゆうきとITと、とっておきの話。

Subscriber.onErrorが呼び出されると、それ以降のonNextメソッドは

いまさらなんですが、RxJavaでは一度Subscriber.onErrorが呼び出されると、それ以降のonNextメソッドや onCompleteメソッドは呼び出されないということを確認いたしましたので、そういう感じで。

// Gradle
compile 'io.reactivex:rxjava:1.1.6' // RxAndroidの最新版が依存しているバージョン
Observable.create(new Observable.OnSubscribe<String>() {
   @Override
   public void call(Subscriber<? super String> subscriber) {
       int[] numbers = new int[]{1, 2, 3, 4, 5, 6};
        for (int number : numbers) {
            if (number == 4) {
                subscriber.onError(new Throwable("error"));
            } else {
                subscriber.onNext("next " + number);
            }
        }
   }
}).subscribe(new Action1<String>() {
   @Override
   public void call(String s) {
       Log.d("onNext", s);
   }
}, new Action1<Throwable>() {
   @Override
   public void call(Throwable throwable) {
       Log.d("onError", throwable.toString());
   }
}, new Action0() {
   @Override
   public void call() {
       Log.d("onComplete", "done!!");
   }
});
D/onNext: next 1
D/onNext: next 2
D/onNext: next 3
D/onError: java.lang.Throwable: error
// 5, 6のログはない