Rad*_*jen 3 android android-networking retrofit2 rx-java2
因此,我想实现 API 响应的示例,如视频 droidcon NYC 2017 - Advanced Networking with RxJava + Retrofit中所示
这是我的代码:
演示者.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();
}
}
}));
Run Code Online (Sandbox Code Playgroud)
所以在这里,当我从服务器收到一些 4xx 错误响应时,我可以去Throwable获取响应代码,如果响应正常,我可以获取我的对象,一切都很酷。
然而,在上面的视频示例中,那家伙建议我用ResponseFromServer响应包装我的代码,如下所示:
Single<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token);这样我也可以访问响应代码,但在这种情况下,我的Throwable永远不会被调用,所以我只能在第一个接受中访问代码方法,但在视频中他发现了该Throwable部分的错误。所以,我无法弄清楚我做错了什么?也许我使用了错误的观察者?
我想我已经弄清楚了,如果我们用Observable<Response<Object>>所有响应代码包装我们的响应对象,所有响应代码都会被常规的接受方法捕获,所以我们需要手动提取代码并进行检查。但是,如果我们保留Observable<Object>errorCode < 200 || errorCode > 400 将被 onError 方法捕获。
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |