美文网首页Android开发
Retrofit+Okhttp的数据和回调封装

Retrofit+Okhttp的数据和回调封装

作者: 倔强的炉包 | 来源:发表于2017-06-22 12:05 被阅读357次

BaseModel:

服务器的统一回调接口为以下格式:

{
  "code:":"",
  "msg:"",
  "content":
      {
         ....
      }
}

首先我们要确定好需要的数据

  1. code状态码和msg信息是必须的
  2. 对于部分post请求的接口,我们只需要知道状态码,然后根据状态码去判断相应的逻辑,并弹出相应的信息,并不需要content的内容;
  3. get请求需要获取content内容,并可以通过常用的GsonConverterFactoryScalarsConverterFactory转换器封装成我们需要的对象数据。
  4. 状态码的不同:
  • 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) {

                    }
                });

这样每次请求的回调就清爽多了。

相关文章

网友评论

    本文标题:Retrofit+Okhttp的数据和回调封装

    本文链接:https://www.haomeiwen.com/subject/hltfcxtx.html