retrofit流程图
-1.RxJava调用Retrofit,从requestGtPushSaeUserInfo()中获得被观察者observable,然后new一个观察者向它订阅
 
0.从业务中发起网络请求调用具体接口
RobotApiService就是Retrofit需要的接口文件
 
1.在RobotApiService文件中会新建一个Retrofit对象添加RxJava2CallAdapterFactory对象用以产生RxJava2CallAdapter,
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(AppConstants.get_IP_ADDR() + "/")
.client(builder.build())//okHttp client对象
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
2.Retrofit对象调用create()产生API接口的一个代理对象。
retrofit.create(RobotApiService.class);
3.在代理对象中拦截需要代理执行的方法Method,通过method对象,构建一个ServiceMethod 对象。执行callAdatper接口的adapt().
而具体callAdapter实现对象RxJava2CallAdapter是在loadServiceMethod()方法new  ServiceMethod对象时,根据入参method对象的返回值类型:Observable.class,从Retrofit对象包含的list中查询到的,而list是在什么时候添加的呢?就是在上边new Retrofit对象时addCallAdapterFactory()添加的
4.接上图代码的最后一步,执行callAdatper接口的adapt(),callAdapter接口的实现对象RxJava2CallAdapter的adapt();会创建Observable被观察者BodyObservable,然后将这个Observable对象返回。
5.回到-1项,调用返回的Observable对象(实际是上图的BodyObservable对象)的subcribe()方法(基类方法),会执行subscribeActual()
而BodyObservable对象中的subscribeActual(),会将被观察者Observable和观察者Observer关联起来。
在调用subscribeActual()方法时会调用upstream的subscribe()即4.项中图片上第一红框CallObservable的subscribe()在执行subscribeActual()
6.在CallObservable的subscribeActual()中会执行call的execute()执行网络请求获取服务器的调用结果,然后传给观察者observer.onNext(),其中observer就是上图红框中BodyObserver对象,而BodyObserver对象中执行observer.onNext(response.body());时的observer对象就是-1.项中new的BaseObservable对象,到此一次网络请求完成

rxjava 调用retrofit执行网络请求的过程的更多相关文章

  1. RxJava + Retrofit完成网络请求

    1.前言 本文基于RxJava.Retrofit的使用,若是对RxJava或Retrofit还不了解的简友可以先了解RxJava.Retrofit的用法再来看这篇文章. 在这片文章之前分别单独介绍过R ...

  2. 基于Retrofit+RxJava的Android分层网络请求框架

    目前已经有不少Android客户端在使用Retrofit+RxJava实现网络请求了,相比于xUtils,Volley等网络访问框架,其具有网络访问效率高(基于OkHttp).内存占用少.代码量小以及 ...

  3. RxJava+Retrofit实现网络请求

    RxJava+Retrofit实现网络请求: 首先要添加依赖 compile 'io.reactivex:rxjava:x.y.z' compile 'io.reactivex:rxandroid:1 ...

  4. 《Android进阶之光》--RxJava结合Retrofit访问网络

    1)配置 dependencies{ ... compile 'io.reactivex:rxjava:1.2.0' compile 'io.reactivex:rxandroid:1.2.1' co ...

  5. # Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析#

    Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析 Volley源码一共40多个类和接口.除去一些工具类的实现,核心代码只有20多个类.所以相对来说分析起来没有那么吃力.但是要想分析透 ...

  6. Retrofit + RxJava + OkHttp 让网络请求变的简单-基础篇

    https://www.jianshu.com/p/5bc866b9cbb9 最近因为手头上的工作做完了,比较闲,想着做一些优化.看到以前用的那一套网络框架添加一个请求比较麻烦,并且比较难用,所以想改 ...

  7. Retrofit网络请求库应用01

    PS:什么是Retrofit? 在官方文档中有这样一句话--A type-safe HTTP client for Android and Java(一个类型安全的http client库),具体的话 ...

  8. uniapp每隔几秒执行一下网络请求(h5端亲测可以,其他端未测试)

    methods: { //执行网络请求 run() { uni.request({ method: 'GET',//请求方式 url: ‘’//请求地址 }).then(res=>{ conso ...

  9. RxJava整合Retrofit遇到的问题总结

    一:初上手(填坑) Observable将事件序列执行完毕后,会回调Observe的onNext()方法和onCompleted()方法,当出现异常/错误时会调用onError()方法. 由此,我们推 ...

随机推荐

  1. centos linux系统日常管理复习 CPU物理数逻辑核数,iftop ,iotop ,sar ,ps,netstat ,一网卡多IP,mii-tool 连接,ethtool速率,一个网卡配置多个IP,mii-tool 连接,ethtool速率 ,crontab备份, 第十八节课

    centos linux系统日常管理复习 物理CPU和每颗CPU的逻辑核数,uptime ,w,vmstat,iftop ,iotop ,sar ,ps,netstat ,一个网卡配置多个IP,mii ...

  2. [C#]嵌入互操作类型

    嵌入互操作类型(Embed Interop Types) 运用office编程调用Excel 的PIA时Microsoft.Office.Interop.Excel.dll时会产生如下问题: 1.提示 ...

  3. python初识(三)

    目录: 字符编码 文件操作 循环结构拾遗 函数 整体介绍 函数的参数 函数的返回值 函数的调用 自定义函数 一.字符编码 1.了解字符编码的知识储备 a. 文件编辑存取文件的原理(nodepad++, ...

  4. 分布式版本管理git学习资料整理推荐

    一.什么是git? Git is a free and open source distributed version control system designed to handle everyt ...

  5. C# 多线程编程第二步——线程同步与线程安全

    上一篇博客学习了如何简单的使用多线程.其实普通的多线程确实很简单,但是一个安全的高效的多线程却不那么简单.所以很多时候不正确的使用多线程反倒会影响程序的性能. 下面先看一个例子 : class Pro ...

  6. SAMBA服务器的安装和配置实践

    实验需求:1) 使用RPM包安装samba服务 2) 实现匿名访问,验证可以读写文件.目录 3) 实现指定用户的访问 4) 实现指定用户的访问,并为用户赋予不同的权限 启动LINUX系统,进行SAMB ...

  7. HDU——2955 Robberies (0-1背包)

    题意:有N个银行,每抢一个银行,可以获得\(v_i\)的前,但是会有\(p_i\)的概率被抓.现在要把被抓概率控制在\(P\)之下,求最多能抢到多少钱. 分析:0-1背包的变形,把重量变成了概率,因为 ...

  8. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  9. python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 4, column 34

    在调试数字驱动用xml文件的方式时,包含读取xml文件的步骤,运行程序报错: d:\test\0629>python XmlUtil.pyTraceback (most recent call ...

  10. nw.js node-webkit系列(17)怎样打包和分发你的应用

    原文链接:http://blog.csdn.net/zeping891103/article/details/50790180