24

誰かが私になぜこのようなコードを説明できますか:

 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;
                }
            });

私が期待するように動作します。つまり、インターネット接続がない場合は何もしません。

4

1 に答える 1

42

基本的に、エラーを消費しないという意味で、エラーを処理doOnErrorしません。たとえば、ログに記録するだけです。(同じことが当てはまります- それもアイテムを消費せず、アイテムは依然としての になります)。doOnNextonNextSubscriber

エラーは引き続きチェーンに送信され、最終的にonErrorSubscriber.

あなたのアプリがでクラッシュしているOnErrorNotImplementedExceptionことは間違いありません。これは、メソッドがSubscriberまったくないため、onErrorメソッドがないためです。

于 2015-11-12T11:47:38.243 に答える