BaseModel:
服务器的统一回调接口为以下格式:
{
"code:":"",
"msg:"",
"content":
{
....
}
}
首先我们要确定好需要的数据
- code状态码和msg信息是必须的
- 对于部分post请求的接口,我们只需要知道状态码,然后根据状态码去判断相应的逻辑,并弹出相应的信息,并不需要content的内容;
- get请求需要获取content内容,并可以通过常用的
GsonConverterFactory
和ScalarsConverterFactory
转换器封装成我们需要的对象数据。 - 状态码的不同:
- 0 - 请求成功
- 1 - 请求失败
- 6 - 登录过期
- 。。。。等其他状态
根据我们的需要封装了下面的model
public class BaseModel<T> implements Serializable {
private String msg;
private String code;
private T content;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public T getContent() {
return content;
}
public void setContent(T content) {
this.content = content;
}
/**
* 判断网络请求是否成功
*
* @return boolean
*/
public boolean isSuccess() {
return code.equals("0");
}
/**
* 判断登录是否过期
*
* @return boolean
*/
public boolean isOverDue() {
return code.equals("6");
}
}
自定义回调
public abstract class BaseAction<T> implements Action1<BaseModel<T>> {
@Override
public void call(BaseModel<T> tBaseModel) {
if (tBaseModel.isSuccess()) {//请求成功
onSuc(tBaseModel.getMsg(), tBaseModel.getContent());
} else if (tBaseModel.isOverDue()) {//登录过期
EventBus.getDefault().post(EventBusEvent.TOKEN_EVENT);
} else {//请求失败
onFail(tBaseModel.getMsg());
}
}
protected abstract void onSuc(String msg, T content);
protected abstract void onFail(String msg);
}
需要说明的登录过期回调中,引用了AndroidEventBus
简单的请求
String user_id = App.getInstance().getUserId();
String autograph = App.getInstance().getSignToken();
RetrofitHelper.deviceApi().devList(user_id, autograph)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseAction<DeviceListBean>() {
@Override
protected void onSuc(String msg, DeviceListBean content) {
mRecyclerView.refreshComplete(0);
mDeviceListBeen = content.getDev_list();
if (mDeviceListBeen != null && mDeviceListBeen.size() > 0) {
mLayoutEmpty.setVisibility(View.GONE);
} else {
mLayoutEmpty.setVisibility(View.VISIBLE);
}
mDeviceListAdapter.setDataList(mDeviceListBeen);
}
@Override
public void onFail(String msg) {
ToastUtil.showShort(mContext, msg);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
});
这样每次请求的回调就清爽多了。