使用rxjava2+retrofit处理网络请求,线程的切换变得十分简单,代码也简洁了很多。但是简介的代码就是对可扩展性有着负面的影响,所以要对rxjava2+retrofit进行一定封装,使结构更清晰,可扩展性更强。这里给出一种可行的封装。
以下均以登陆请求为例子。
- API地址:
http://xxx/user/login
- Post请求,参数
account
和password
均为String
简单封装
首先定一个retrofit接口:
UserService
public interface UserService { @FormUrlEncoded @POST("/user/login") Observable<ResponseBean<UidBean>> login(@Field("account") String account, @Field("password") String password); }
这里
ResponseBean
是一个返回值json对应的实体类,服务器返回的json数据格式为{code: xxx, message: xxx, data:xxx}
。而UidBean
是一个data的具体内容,也是个json实体类,具体是什么无关紧要。/** * 服务器返回值的实体类 * Created by stephen on 2017/9/8. */ public class ResponseBean<T> { @SerializedName("code") private int code; @SerializedName("message") private String message; @SerializedName("data") private T data; public ResponseBean(int code, String message) { this.code = code; this.message = message; } public int getCode() { return code; } public String getMessage() { return message; } public T getData() { return data; } /** * 根据返回码确定API是否请求返回失败 * * @return 失败返回true, 成功返回false */ public boolean isCodeValid() { return code == 0; } @Override public String toString() { return "code:" + code + ", message:" + message + ",data:" + data.toString(); } }
Oberser类的封装
这里
BaseObserver
里直接对Disposable
进行处理,内存泄漏什么的省心多了。同时还保存了一个子类可见的errMsg,可以获取自定义的错误类型。(关于Disposable可以参考我的这篇文章,如果有哪里理解错了记得帮忙指出哦)。
public abstract class BaseObserver<T> implements Observer<T> { protected String errMsg = ""; private Disposable disposable; @Override