繁体   English   中英

使用RxJava2改造响应代码

[英]Retrofit response codes with RxJava2

因此,我想实现来自API响应的示例,例如此视频droidcon NYC 2017-RxJava + Retrofit的高级网络

这是我的代码:

Presenter.java

compositeDisposable.add(RetrofitClient.createService(GetApi.class)
            .getResponseFromServer(token)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<ResponseFromServer>() {
                @Override
                public void accept(ResponseFromServer responseFromServer) throws Exception {
                    mView.setResponseObject(responseFromServer);
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    throwable.printStackTrace();
                    if (throwable instanceof HttpException) {
                        int responseCode = ((HttpException) throwable).code();
                    }

                }
            }));

因此,在这里,当我从服务器收到一些4xx错误响应时,可以转到Throwable并获取响应代码,如果响应正常,则可以获取我的对象,并且一切都很棒。

但是,在上面的视频示例中,该人员建议我用以下响应包装我的ResponseFromServerSingle<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token); 因此我也可以访问响应代码,但是在那种情况下,我的Throwable永远不会被调用,因此我只能在第一个accept方法中访问代码,但是在视频中,他捕获了Throwable部分中的错误。 所以,我不能弄清楚我在做什么错? 也许我使用了错误的观察者?

当服务器响应为code < 200 || code >= 300 code < 200 || code >= 300 ,则将调用onError() 其他情况下onNext()将被调用。

另外,如果onNext()代码引发任何异常,则将在onError()捕获该异常。

我想我已经弄清楚了,如果我们用Observable<Response<Object>>包装响应对象,则所有响应代码都将被常规的accept方法捕获,因此我们有点需要手动提取代码并进行检查。 但是,如果保留Observable<Object> ,则errorCode <200 || errorCode> 400将被onError方法捕获。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM