首先我们看一个Retrofit+RxJava做网络请求的例子
接口:
|
|
调用如下
|
|
Response
是为了统一处理返回结果而定义的泛型类
|
|
flatResponse
是一个分割操作,旨在将Response<T>
转换成Observable<T>
|
|
这只是一个接口调用,如果我们再增加一个接口getXX()
,我们又需要这样
我们发现这样是不是太麻烦了,每次都要重复写这些操作符,那有没有办法将一组操作符重用于多个数据流中呢?当然有,接下来就来讲今天的重头–> compose
操作符
compose
在说compose之前要先介绍下TransformerTransformer
实际上就是一个Func1<Observable<T>, Observable<R>>
,换言之就是:可以通过它将一种类型的Observabl
e转换成另一种类型的Observable
,这里我们就是通过Transformer将Observable<Response<T>>
转换成了Observable<T>
,
|
|
我们在新增一个接口的时候就可以通过compose
操作符实现Transformer
的转换
|
|
这样我们就实现了Observable<Response<Profile>>
到Observable<Profile>
的类型转换,并处理了线程调度、分割返回结果等操作符组合,达到了复用的目的
参考
【译】避免打断链式结构:使用.compose( )操作符
给 Android 开发者的 RxJava 详解
RxJava+Retrofit框架Demo(一)