誰かが私になぜこのようなコードを説明できますか?
networApi.getList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(throwable -> {
throwable.getMessage();
})
.doOnNext(list -> {
coursesView.populateRecyclerView(list);
courseList = (List<Course>) courses;
}).subscribe();
インターネットがない場合はdoOnErrorに入りますが、さらにスローしてアプリがダウンしますが、次のようなコードを使用します。
networkApi.getList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<List<? extends Course>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.getMessage();
}
@Override
public void onNext(List<? extends Course> list) {
coursesView.populateRecyclerView(list);
courseList = (List<Course>) list;
}
});
私が期待するように動作します。つまり、インターネット接続がない場合は何もしません。
基本的に、doOnError
はエラーをconsumeしないという意味で、エラーをhandleしません。それはただそれで何かをします、例えばそれを記録します。 (同じことがdoOnNext
にも当てはまります。アイテムも消費せず、アイテムはonNext
のSubscriber
になります)。
エラーは引き続きチェーンに送信され、最終的にはonError
のSubscriber
になります。
アプリがOnErrorNotImplementedException
でクラッシュしていることは間違いありません。これは、Subscriber
がまったくないため、onError
メソッドがないためです。