Retrofit 回调封装的意义
在 Android 的世界里,可以说 Retrofit 已经一统网络请求的江湖,Retrofit 和 Spring Cloud 中的 Feign 一样都是声明式 REST 请求客户端,都提供了大量注解和完善的 json 对象转换机制,同时不失灵活性。
通常服务端返回都是这种统一格式的对象:
1 | public class BaseModel<T> { |
Android 端拿到这个对象通常要判断 code,然后做对象剥离、token 有效性判断、网络故障处理等,这些如果封装起来统一处理,可以极大简化网络调用。
这里根据实际开发经验,对使用了 Rxjava 的回调和普通回调分别作了封装,实现以上功能。
使用 Rxjava 的回调封装
Retrofit 通过 RxJava2CallAdapter 可以直接将返回结果转换为可观察的对象,拿到 Observable 进行一系列链式处理就方便多了。
比如声明一个 API 调用方法:
1 | ("/userinfo") |
我们通过一个实现 Observer 接口的抽象类对返回结果进行处理,实现对象剥离、token 有效性判断、网络故障的统一处理。
完整封装代码:
1 | public abstract class RxSubscribe<T> implements Observer<BaseModel<T>> { |
注意这里使用的是 RxJava2,为使代码更简洁,不强制复写 onSubscribe、onFailed 等方法。
请求回调部分,复写 onSuccess 抽象方法就可以直接拿到剥离后目标对象:
1 | Rest.getRestApi().getRxUser() |
还可以复写 onSubscribe 和 onComplete 等方法控制加载中对话框的显示与隐藏。
普通回调的封装
对于普通回调,返回的是 Call 类型,声明一个 API 调用方法:
1 | ("/userinfo") |
回调封装部分与上面类似,直接上代码:
1 | public abstract class BaseBack<T> implements Callback<BaseModel<T>> { |
同样是复写 onSuccess 方法直接拿到剥离后的目标对象:
1 | Rest.getRestApi().getUser() |

