Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改响应类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_4@
我正在使用一个始终返回如下所示的 JSON对象的API:

public class ApiResponse<T> {
    public Boolean success;
    public T data;
}

data field是一个JSON对象,包含所有有价值的信息.当然,对于不同的请求,它们是不同的.所以我的改造界面如下所示:

@GET(...)
Observable<ApiResponse<User>> getUser();

当我想处理响应时我需要做的事如:

response.getData().getUserId();

我真的不需要那个布尔成功字段,我想省略它,所以我的改装界面可能如下所示:

@GET(...)
Observable<User> getUser();

在Gson可以这样做吗?或者可能是一个整洁的Rx功能,它会自动转换它?

编辑:
示例json:

{
  "success": true,"data": {
    "id": 22,"firstname": "Jon","lastname": "SNow"
  }
}

编辑2:
我已经用改装拦截做了这个,我手动修改响应体.它有效,但如果您有任何其他建议,请发布它们:)

@H_502_4@

解决方法

正如Than所说,使用拦截器的解决方案并不是那么好.我已经设法用一个Rx变压器来解决这个问题.我还添加自定义api异常,@R_618_9543@时我可以抛出它并在onError中轻松处理它.我认为它更强大.

响应包装器:

public class ApiResponse<T> {
    private Boolean success;
    private T data;
    private ApiError error;
}

成功为false时返回错误对象:

public class ApiError {
    privatE int code;
}

成功为假时抛出此异常:

public class ApiException extends RuntimeException {
    private final ApiError apiError;
    private final transient ApiResponse<?> response;

    public ApiException(ApiResponse<?> responsE) {
        this.apiError = response.getError();
        this.response = response;
    }

    public ApiError getApiError() {
        return apiError;
    }

    public ApiResponse<?> getResponse() {
        return response;
    }
}

一个变压器:

protected <T> Observable.Transformer<ApiResponse<T>,T> applyschedulersAndExtractData() {
    return observable -> observable
            .subscribeOn(schedulers.io())
            .observeOn(Androidschedulers.mainThread())
            .map(tApiResponse -> {
                if (!tApiResponse.issuccess())
                    throw new ApiException(tApiResponsE);
                else
                    return tApiResponse.getData();
            });
}
@H_502_4@ @H_502_4@
@H_502_4@
@H_502_4@
@H_675_63@本图文内容来源于网友网络收集整理提供,作为学习参使用,版权属于原作者。

猜你在找的Android相关文章

问题描述:预览图像被拉伸变形问题原因:由于预览图像大小跟SurfaceView 大小不一致引起 解决方法:获取系统支持的所有预览尺寸[getSupportedPictureSizes],然后再取一个比
可以忽略onWindowFocusChanged、onSaveInstanceState、onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到、忽略掉这几个方法
ListView 的高度 必须要设置成一个明确的值 或者match_parent 不然就会调用多次getView方法
@L_944_35@
一. 在Android的源文件中的乱码问题Android studio安装后发现所有的中文,不管是界面上的还是输出的log中的中文都变成小框框,具体的解决方法如下,可以肯定是字体的问题解决:菜单Fil
第一部分 个性化控件(View)主要介绍那些不错个性化的 View,包括 ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphView、UI Style 等等。一、Li...
View与Widget带小红点的提示:BadgeViewBadgeView(stefanjauker的,改颜色需要在BadgeView源码里面改) android-viewbadger(可以设置提示为数字或者文字,以及背景颜色)标签tagviewTAGView(可以设置背景图片的形状和颜色,可以同时显示图片和文字) android-tagview(Android-Cloud-Ta...
内容抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 下拉刷新 ViewPager 图表(Chart) 菜单(Menu) 浮动菜单 对话框 空白页 滑动删除 手势操作 RecyclerView Card Color Drawable Spinner 布局 模糊效果 TabBar AppBar 选择器(Picker) 跑马灯 日历时间 主题样式 ImageView 通知
Android Context作用Context 用于访问全局信息的接口App的资源: Strings, drawable资源等等下面咱们来看一个例子public class MainActivity extends Activity { String TAG = "CARLOZ"; @Override protected void onCreate(Bundle savedIn

android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改响应类型

微信公众号搜 "程序精选"关注

大佬总结

以上是大佬教程为你收集整理的android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改响应类型全部内容,希望文章能够帮你解决android – Retrofit 2 RxJava – Gson – “全局”反序列化,更改响应类型所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。