android-Retrofit 2-使用相同请求的内容管理http“ 204无内容”和“ 200”

android-Retrofit 2-使用相同请求的内容管理http“ 204无内容”和“ 200”,第1张

概述我正在将Retrofit2和OkHttp3与RxJava2一起使用我正在使用一些参数调用服务器.服务器根据这些参数返回带有对象列表的JSON.但是,如果没有要返回的内容,则服务器将返回’204-NoContent’,而不是返回带有空列表的JSON.结果,我得到一个NullPointerException.我知道如何管理JSON响

我正在将Retrofit 2和Okhttp 3与RxJava2一起使用

我正在使用一些参数调用服务器.服务器根据这些参数返回带有对象列表的JSON.但是,如果没有要返回的内容,则服务器将返回’204-No Content’,而不是返回带有空列表的JsON.结果,我得到一个NullPointerException.

我知道如何管理JsON响应,也知道如何管理204响应,但不能为同一调用一起管理.

我可以使用拦截器,但是由于有很多电话,我的Retrofit客户端仅创建一次,然后在必要时使用Dagger2注入.

如何处理此案?

解决方法:

基于@eurosecom的建议,我已经解决了如下所述的问题.唯一的问题是我希望由Retrofit将服务器的“无内容”响应作为“成功”进行管理,但是使用此解决方案,仍将其作为错误进行管理.

改造客户

return new OkhttpClIEnt.Builder()    .addInterceptor(new Generalinterceptor(callback))    .buildprivate 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    }}

在演示者中

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    });
总结

以上是内存溢出为你收集整理的android-Retrofit 2-使用相同请求内容管理http“ 204无内容”和“ 200”全部内容,希望文章能够帮你解决android-Retrofit 2-使用相同请求的内容管理http“ 204无内容”和“ 200”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091927.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存