RxJava2Demo icon indicating copy to clipboard operation
RxJava2Demo copied to clipboard

demo中ChapterThree类中的方法practice1出现的一些问题

Open hegaojian opened this issue 5 years ago • 4 comments

如果注册失败了,登录的方法还会执行,怎么不执行他呢,而且这个方法里面好像找不到添加Disposable的地方

hegaojian avatar Jul 11 '18 07:07 hegaojian

public void loginAndregister() {
        final Api api = RetrofitProvider.get().create(Api.class);
        api.register("hegaojian", "123456", "123456")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(new Consumer<ResponseVo>() {
                    @Override
                    public void accept(ResponseVo responseVo) throws Exception {
                        if (responseVo.getErrorCode() == 0) {
                            Log.d("hgj", "注册成功");
                        } else {
                            Log.d("hgj", "注册失败");

                        }
                    }
                }).observeOn(Schedulers.io())
                .flatMap(new Function<ResponseVo, ObservableSource<ResponseVo>>() {
                    @Override
                    public ObservableSource<ResponseVo> apply(ResponseVo responseVo) throws Exception {
                        return api.login("hegaojian3", "123456");
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<ResponseVo>() {
                    @Override
                    public void accept(ResponseVo responseVo) throws Exception {
                        if (responseVo.getErrorCode() == 0) {
                            Log.d("hgj", "登录成功");
                        } else {
                            Log.d("hgj", "登录失败");
                        }
                    }
                });
    }

hegaojian avatar Jul 11 '18 07:07 hegaojian

在注册后面的doOnNext里抛异常啊


        api.register("hegaojian", "123456", "123456")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnNext(new Consumer<ResponseVo>() {
                    @Override
                    public void accept(ResponseVo responseVo) throws Exception {
                        if (responseVo.getErrorCode() == 0) {
                            Log.d("hgj", "注册成功");
                        } else {
                            Log.d("hgj", "注册失败");
                            throw new RuntimeException("注册失败");
                        }
                    }
                })

抛出来的异常就可以在下游接收处理啊

ssseasonnn avatar Jul 12 '18 01:07 ssseasonnn

多思考多实践

ssseasonnn avatar Jul 12 '18 01:07 ssseasonnn

多谢多谢

hegaojian avatar Jul 12 '18 01:07 hegaojian