Observable将事件序列执行完毕后,会回调Observe的onNext()方法和onCompleted()方法,当出现异常/错误时会调用onError()方法。java
由此,咱们推断,问题出现的地方应该是在Observable的执行过程。json
先阐述一下笔者的需求,使用retrofit和rxjava进行简单的网络请求(请求获得的数据自动装配为实体类),后端给的返回格式是标准的Result格式(即status,message,data),前二者相对固定,而data域多是User对象,Paper对象,也多是Map/List,而咱们想要获得的就是这个data中的数据,那么咱们势必须要进行数据的剥离。刚好,RxJava的map(变换)能够实现此需求。后端
下面,上图:网络
1.Paper实体类学习
2.Result结果集实体类测试
3.定义Retrofit的请求接口ui
4.建立Retrofit实例spa
5.因为请求接口定义的返回类型为Observable<...>类型,因此可直接在其上进行rx的链式操做日志
6.图中的map()方法中的参数是一个自定义的接口,用于 事件变换code
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的封装。