码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-06 23:42:05      阅读:712      评论:0      收藏:0      [点我收藏+]

标签:cli   图片   body   服务   实现   info   rmi   adapter   uil   

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执行网络请求的过程

标签:cli   图片   body   服务   实现   info   rmi   adapter   uil   

原文地址:https://www.cnblogs.com/androiddream/p/9147843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!