RxJava整合Retrofit遇到的问题总结

一:初上手(填坑)

  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的封装。

时间: 2024-11-10 00:55:17

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

RxJava 与 Retrofit 结合的最佳实践

前言 RxJava和Retrofit也火了一段时间了,不过最近一直在学习ReactNative和Node相关的姿势,一直没有时间研究这些新东西,最近有个项目准备写,打算先用Android写一个Demo出来,却发现Android的世界发生了天翻地覆的变化,EventBus和OKHttp啥的都不见了,RxJava和Retrofit是什么鬼? 好吧,到Github上耐着性子看过了RxJava和Retrofit的介绍和几个Demo,原来Android的大神Jake Wharton为Retrofit这个项

RxJava 与 Retrofit

RxJava 与 Retrofit

RxJava和Retrofit的简单使用

在最近做的项目中,因为频繁用到网络请求,所以使用了现在比较流行的框架RxJava和Retrofit来代替之前的Okhttp的繁琐请求. retrofit是用来做网络请求操作,RxJava是用来切换线程.转换数据操作的. 首先第一步,使用三方的框架,肯定是先添加依赖包.项目中用的Rxjava2.0.retrofit2.0,而且Rxjava2.0和Rxjava1.0并不兼容,所以使用起来需要注意.添加一下依赖. compile "com.squareup.retrofit2:retrofit:$ro

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

retrofit流程图 -1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅 0.从业务中发起网络请求调用具体接口 RobotApiService就是Retrofit需要的接口文件 1.在RobotApiService文件中会新建一个Retrofit对象添加RxJava2CallAdapterFactory对象用以产生RxJava2CallAdapter, Retrofit retrofit

Rxjava、Retrofit返回json数据解析异常处理

每个App都避免不了要进行网络请求,从最开始的用谷歌封装的volley到再到android-async-http再到OKHttpUtils再到现在的Retrofit和RxJava,从我自己用后的体验来看,用了retrofit和RxJava真的回不去了,回不去了,不去了,去了,了-(哈哈,本来还想分析下这四个的区别,网上这样的文章很多,我就没必要多添乱了-.-).不多逼逼,下面开始正文. 1.Rxjava和Retrofit依赖导入: compile 'io.reactivex:rxandroid:

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

原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转载权,未经允许,不得转载! 译者 : yuxingxin 项目地址 : RxJava-Essentials-CN 在上一章中,我们学习了如何使用调度器在不同于UI线程的线程上操作.我们学习了如何高效的运行I/O任务而不用阻塞UI以及如何运行耗时的计算任务而不耗损应用性能.在最后一章中,我们将创建一个最终版的真

MVP模式入门(结合Rxjava,Retrofit)

本文MVP的sample实现效果: github地址:https://github.com/xurui1995/MvpSample 老规矩,在说对MVP模式的理解之前还是要再谈谈MVC模式,了解了MVC的缺点.我们才知道为什么要用MVP. 关于MVC的图解,我在网上找到了一些图.如下:    MVC模式在开发web或者管理系统中应用很多,我们的View与人交互,人点击鼠标或者输入一些东西时,View会发送相应的指令给Controller,Controller 接到指令,再去调用Model的方法去

[Android] 转-RxJava+MVP+Retrofit+Dagger2+Okhttp大杂烩

原文url: http://blog.iliyun.net/2016/11/20/%E6%A1%86%E6%9E%B6%E5%B0%81%E8%A3%85/ 这几年来android的网络请求技术层出不穷,网络请求从最初的HttpClient,HttpURLConnection到Volley,OkHttp,Retrofit.但是如果直接使用,每个网络请求都会重复很多相同的代码,这显然不是一个老司机需要的.接下来我们就讲讲网络请求封装那点事. 主要利用以下技术点 - Retrofit2 Retrof

RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span.s1 { font: 12.0px "Helvetica Neue" } 新建工程集成,工具集成 一.集成 RxAndroid+RxJava git官网 https://github.com/ReactiveX/RxAndroid Gson git官网 https://github.co