使用 RxJava2 改造响应代码
Retrofit response codes with RxJava2
所以我想像这个视频中那样实现 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
并获取响应代码,如果响应正常,我可以获得我的对象,一切都很好。
但是,在上面的视频示例中,那个人建议我用这样的 Response 包装我的 ResponseFromServer
:
Single<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token);
所以我也可以访问响应代码,但在那种情况下,我的 Throwable
永远不会被调用,所以我只能在第一个接受方法中访问代码,但在视频中他发现了错误在 Throwable
部分。所以,我无法弄清楚我做错了什么?也许我用错了 Observer?
当来自服务器的响应为 code < 200 || code >= 300
时,在这些情况下 onError()
将被调用。和其他情况 onNext()
将调用。
此外,如果您在 onNext()
中的代码抛出任何异常,将在 onError()
中捕获
我想我明白了,如果我们用 Observable<Response<Object>>
包装我们的响应对象,所有的响应代码都会被常规的 accept 方法捕获,所以我们有点需要手动提取代码并执行检查。但是,如果我们保留 Observable<Object>
,errorCode < 200 || errorCode > 400 将在 onError 方法中被捕获。
所以我想像这个视频中那样实现 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
并获取响应代码,如果响应正常,我可以获得我的对象,一切都很好。
但是,在上面的视频示例中,那个人建议我用这样的 Response 包装我的 ResponseFromServer
:
Single<Response<ResponseFromServer>> getResponseFromServer(@Header("X-Authorize") String token);
所以我也可以访问响应代码,但在那种情况下,我的 Throwable
永远不会被调用,所以我只能在第一个接受方法中访问代码,但在视频中他发现了错误在 Throwable
部分。所以,我无法弄清楚我做错了什么?也许我用错了 Observer?
当来自服务器的响应为 code < 200 || code >= 300
时,在这些情况下 onError()
将被调用。和其他情况 onNext()
将调用。
此外,如果您在 onNext()
中的代码抛出任何异常,将在 onError()
我想我明白了,如果我们用 Observable<Response<Object>>
包装我们的响应对象,所有的响应代码都会被常规的 accept 方法捕获,所以我们有点需要手动提取代码并执行检查。但是,如果我们保留 Observable<Object>
,errorCode < 200 || errorCode > 400 将在 onError 方法中被捕获。