Retrofit回调封装的意义
在Android的世界里,可以说 Retrofit 已经一统网络请求的江湖,Retrofit和Spring Cloud中的Feign一样都是声明式REST请求客户端,都提供了大量注解和完善的json对象转换机制,同时不失灵活性。
通常服务端返回都是这种统一格式的对象:
public class BaseModel<T> {
public int code;
public String message;
public T data;
}
Android端拿到这个对象通常要判断code,然后做对象剥离、token有效性判断、网络故障处理等,这些如果封装起来统一处理,可以极大简化网络调用。
这里我根据自己实际开发经验,对使用了Rxjava的回调和普通回调分别作了封装,实现以上功能。
使用Rxjava的回调封装
Retrofit通过RxJava2CallAdapter可以直接将返回结果转换为可观察的对象,拿到Observable进行一系列链式处理就方便多了。
比如声明一个API调用方法:
@GET("/userinfo")
Observable<BaseModel<User>> getRxUser();
我们通过一个实现Observer接口的抽象类对返回结果进行处理,实现对象剥离、token有效性判断、网络故障的统一处理。
完整封装代码:
public abstract class RxSubscribe<T> implements Observer<