【发布时间】:2018-06-20 10:11:07
【问题描述】:
所以我想实现这个视频中的 API 响应示例 droidcon NYC 2017 - Advanced Networking with 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 并获取响应代码,如果响应正常,我可以获取我的对象,一切都很好。
但是,在上面的视频示例中,该人建议我将 ResponseFromServer 包装成这样的响应:
Single<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token); 所以我也可以访问响应代码,但在这种情况下,我的 Throwable 永远不会被调用,所以我只能在第一个接受方法中访问代码,但在视频中他发现了 @987654327 中的错误@ 部分。所以,我无法弄清楚我做错了什么?也许我使用了错误的观察者?
【问题讨论】:
标签: android retrofit2 rx-java2 android-networking