Ese*_*far 4 android dagger-2 retrofit2 okhttp3 rx-java2
我正在使用 Retrofit 2 和 OkHttp 3,以及 RxJava2
我正在使用一些参数调用服务器。根据参数,服务器返回一个带有对象列表的 JSON。但是如果没有什么可返回,则服务器不会返回带有空列表的 JSON,而是返回“204 - 无内容”。结果我得到一个 NullPointerException。
我知道如何管理 JSON 响应,我知道如何管理 204 响应,但不能一起管理同一个调用。
我可以使用拦截器,但由于我有很多调用,我的 Retrofit 客户端创建一次,然后在必要时使用 Dagger2 注入。
我该如何处理这个案例?
根据@eurosecom 的建议,我已经解决了我的问题,如下所述。唯一的问题是我希望来自服务器的“无内容”响应由 Retrofit 管理为“成功”,但使用此解决方案,它仍然作为错误进行管理。
改造客户端
return new OkHttpClient.Builder()
.addInterceptor(new GeneralInterceptor(callback))
.build
private static class GeneralInterceptor implements Interceptor {
//...
@Override
public Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
Request.Builder requestBuilder = originalRequest.newBuilder();
Response response = chain.proceed(requestBuilder.build());
// Throw specific Exception on HTTP 204 response code
if (response.code() == 204) {
throw new NoContentException("There is no content");
}
return response; // Carry on with the response
}
}
Run Code Online (Sandbox Code Playgroud)
在演示者中
mModel.performRequest()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.onErrorResumeNext(throwable -> {
if (throwable instanceof NoContentException) {
return Observable.empty();
}
return Observable.error(throwable);
})
.subscribe(res -> {
//... Manage the result
}, throwable -> {
//... On error
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5306 次 |
| 最近记录: |