RxJava:正确捕获异常

时间:2018-02-18 09:25:40

标签: android rx-java reactive-programming

我正在尝试在Schedulers IO线程中执行一些IO操作,如果抛出异常,我想向用户显示一些Toast。

为此,我使用以下代码:

Observable.interval(0, 15, TimeUnit.SECONDS)
            .observeOn(Schedulers.io())
            .doOnNext(event -> new Repository().inputOutput(MainActivity.this);)
            .observeOn(AndroidSchedulers.mainThread())
            .doOnError(throwable -> 
                    Toast.makeText(MainActivity.this, "Error message", Toast.LENGTH_SHORT).show())
            .subscribe();

当方法" inputOutput"抛出异常时,我希望Throwable可以被捕获到" doOnError"消费者,但它没有发生,并且异常被抛到周围的代码中。

我做错了什么? 非常感谢你!

1 个答案:

答案 0 :(得分:1)

应该是这样的:

Observable.interval(0, 15, TimeUnit.SECONDS)
              .flatMap(event -> new Repository().inputOutput(MainActivity.this);)        
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({your onNext/onComplete handler}, throwable -> 
                    Toast.makeText(MainActivity.this, "Error message", Toast.LENGTH_SHORT).show()));