一:初上手(填坑)

  Observable将事件序列执行完毕后,会回调Observe的onNext()方法和onCompleted()方法,当出现异常/错误时会调用onError()方法。

由此,我们推断,问题出现的地方应该是在Observable的执行过程。

  先阐述一下笔者的需求,使用retrofit和rxjava进行简单的网络请求(请求得到的数据自动装配为实体类),后端给的返回格式是标准的Result格式(即status,message,data),前两者相对固定,而data域可能是User对象,Paper对象,也可能是Map/List,而我们想要得到的就是这个data中的数据,那么我们势必需要进行数据的剥离。恰好,RxJava的map(变换)可以实现此需求。

  下面,上图:

  1.Paper实体类

  2.Result结果集实体类

  3.定义Retrofit的请求接口

  4.创建Retrofit实例

  5.由于请求接口定义的返回类型为Observable<...>类型,所以可直接在其上进行rx的链式操作

  6.图中的map()方法中的参数是一个自定义的接口,用于 事件变换

  7. 图5中的onNext方法中使用自定义接口(如下图),进行数据转发

  8.测试

  9. 一万个草尼玛,什么鬼。再往下看日志,发现

  

卧槽,尼玛. 无效的时间指示器(原谅我蹩脚的英文)。且上图的数字,便是json中的日期

  10. 由此,笔者便猜测是Gson装配过程中出现的问题,然后通过一番学习,发现Gson默认解析时间时会出现问题,原因未知,有知道的同学可以在评论区留言,互相学习了啦。

  解决方案:

     GsonBuilder builder = new GsonBuilder();

        // Register an adapter to manage the date types as long values
builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
}); Gson gson = builder.create();

  然后在下图位置传入gson实例

  11. 再次测试

天地良心,终于可以了。下一节,会写一些关于对RxJava和Retrofit的封装。

RxJava整合Retrofit遇到的问题总结的更多相关文章

  1. Retrofit与RXJava整合

    Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API.下面我用对比的方式来介绍 Retrofit 的 RxJava 版 ...

  2. Retrofit与RXJava整合(转)

    Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API.下面我用对比的方式来介绍 Retrofit 的 RxJava 版 ...

  3. RxJava 与 Retrofit 结合的最佳实践

    转自:http://gank.io/post/56e80c2c677659311bed9841?from=timeline&isappinstalled=0&nsukey=g1D1Y6 ...

  4. (转载)RxJava 与 Retrofit 结合的最佳实践

    RxJava 与 Retrofit 结合的最佳实践 作者:tough1985 感谢 DaoCloud 为作者提供的 500 RMB 写作赞助: 成为赞助方 /开始写作 前言 RxJava和Retrof ...

  5. Kotlin封装RxJava与Retrofit

    代码地址:https://github.com/DarkPointK/RxTrofit.git 前言 Retrofit是Square公司开发的一个类型安全的Java和Android 的REST客户端库 ...

  6. rxjava 调用retrofit执行网络请求的过程

    retrofit流程图 -1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅   0.从业务中 ...

  7. RxJava结合Retrofit和Volley简单比较

    通过使用Retrofit+RxJava和Volley获取知乎日报消息,比较两者的使用区别. 文中 RR:代指Retrofit+Rxjava 主要两个方面使用 使用两者获取Json数据,使用Gson解析 ...

  8. Rxjava, RxAndroid, Retrofit 等库的使用

    RxJava的基本用法: 关于 unSubscribe() 的调用问题: There is no need to unsubscribe in onCompleted. Take a look at  ...

  9. RxJava开发精要8 – 与REST无缝结合-RxJava和Retrofit

    原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...

随机推荐

  1. BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)

     BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议) 

  2. RedisPool操作Redis,工具类实例

    redis.properties 配置文件内容 redis.pool.maxActive=100redis.pool.maxIdle=20redis.pool.maxWait=3000redis.po ...

  3. Linux_异常_08_本机无法访问虚拟机web等工程

    这是因为防火墙的原因,把响应端口开启就行了. # Firewall configuration written by system-config-firewall  # Manual customiz ...

  4. win10 音频服务未响应的解决方法

    最近在调试usb audio设备,由于使用的是自己的audio 设备,所以要频繁的更换采样率,可是 在win10中经常出现一些莫名其妙的问题,今天这个问题就是折腾了我好久才搞定的. 当把usb aud ...

  5. 数组a[n]中存放1-n中的n-1个数,给出算法找出重复的那一个数

    问题描述: 数组a[n]中存放1-n中的n-1个数,给出算法找出重复的那一个数. 算法一: 对数组a[n]进行冒泡排序,如果冒泡所得的最值和前一个最值相等,则该最值为重复的数. 分析: 该算法时间复杂 ...

  6. opensuse安装pycurl失败记录

    早上在opensuse安装pycurl,一直出现如下错误: pepper@VM_56_243_suse:~/code/gitosis-autotest> pip install pycurl C ...

  7. 更加清楚理解mvc结构

      更加清楚理解mvc结构 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.

  8. vue2.0 页面A跳转到页面B,B页面停留在A页面的滚动位置的解决方法

    如果页面A沿Y轴滚动一段距离,然后跳转到页面B: 在进入B页面时,B页面已经滚到页面A的距离,返回页面A,发现A还在之前的滚动位置: 这样体验就很不好,所以我们要进行一些处理: 我的方法是:在路由守卫 ...

  9. 不会PS如何自制简单线条、任意填充色的小图标

    最近在做H5的开发中,需要用到一些简单的小图标,百度出来的图片,总是或多或少差了一些颜色.于是准备自己制作图片,PS是不会的,学习以及软件安装太费时,于是就准备用常见的软件来试着做一做. 在尝试了 w ...

  10. Push to origin/master was rejected (Git提交错误)

    [问题描述] 在使用Git Push代码的时候,会出现 Push to origin/master was rejected 的错误提示. 在第一次提交到代码仓库的时候非常容易出现,因为初始化的仓库和 ...