MVP继续封装

来源:互联网 发布:狸窝转换器mac版 编辑:程序博客网 时间:2024/06/03 06:21

建议先看前面的 http://blog.csdn.net/miao_crazy/article/details/53373568

废话不多说 直接上封装
监听封装

向服务器提交数据 包含成功 失败 两种情况 (目前项目里是这样的);

/** * Created by ${苗} on 2016/12/21. */public interface IBaseCommitListener {    /**     * 提交数据成功     */    void commitDataSuccess();    /**     * 提交数据失败     * @param msg 错误信息     */    void commitDataFail(String msg);}

再来一个
这里封装了 请求数据失败相关的接口 恩 ,我的是列表界面 ; 获取数据成功的 LZ单独处理了 因为之前有的地方 处理了一些逻辑 也可以写在这个接口里 但是注意返回值 类型 为T 毕竟是base接口么!

/** * Created by ${苗} on 2016/12/20. * 自定义baseListener */public interface IBaseListener {    /** 获取数据失败     * @param msg   错误信息     */    void getDataFailed(String msg);    /** 连接超时 (预留)     * @param msg   超时信息     */    void getDataTimeOut(String msg);}

在上一个封装 绞尽脑汁

/** * Created by ${苗} on 2016/12/20. * 自定义gson解析工具类 含返回码判断  泛型T 为bean类型 例如AppInfoBean */public class GsonUtil {    /**     * @param data 带解析数据     * @param type  数据bean     * @param iBaseListener 基类接口     * @param <T>   返回数据泛型     * @return      返回T     */    public static  <T>T checkOutData(String data,Class<T> type, IBaseListener iBaseListener) {        //请求成功 解析数据        T result = null;        try {            JSONObject jsonObject = new JSONObject(data);            String code = jsonObject.getString("code");            switch (code) {                case "S":                    Gson gson = new Gson();                    result = gson.fromJson(jsonObject.getString("data"), type);                    break;                case "F":                    //请求失败                    iBaseListener.getDataFailed(jsonObject.getString("msg"));                    break;                case "T":                    //预留                    break;            }        } catch (Exception e) {            e.printStackTrace();            iBaseListener.getDataFailed("解析失败");        }        return result;    }    /** 提交数据 处理返回结果方法     * @param data     * @param iBaseCommitListener     */    public static  void checkOutCommit(String data, IBaseCommitListener iBaseCommitListener) {        try {            JSONObject jsonObject = new JSONObject(data);            String code = jsonObject.getString("code");            switch (code) {                case "S":                    iBaseCommitListener.commitDataSuccess();                    break;                case "F":                    //请求失败                    String msg = jsonObject.getString("msg");                    iBaseCommitListener.commitDataFail(msg);                    break;                case "T":                    //预留                    break;            }        } catch (Exception e) {            e.printStackTrace();            iBaseCommitListener.commitDataFail("解析失败");        }    }}

这样的话 网络请求和处理就变的简单了

public class BackTripInfoModelImpl extends IBaseMoudel implements BackTripInfoContract.Moudel {    private HttpUtil.HttpCallBack mHttpCallBack;    @Override    public void getDataFromNet(String url, Map<String, String> map, final OnLoadNewsListListener onLoadNewsListListener) {        mHttpCallBack = new HttpUtil.HttpCallBack() {            @Override            public void onError(String meg) {                onLoadNewsListListener.getDataFailed("网络连接失败!");            }            @Override            public void onSusscess(String data) {                BackvehicleBean backvehicleBean = GsonUtil.checkOutData(data, BackvehicleBean.class, onLoadNewsListListener);                onLoadNewsListListener.onSuccess(backvehicleBean.getList());            }        };        httpUtil.postMap(url, map, mHttpCallBack);    }}

onLoadNewsListListener接口 我也带上吧

/** * 公用列表接口 * Created by ${苗} * on 2016/11/22. */public interface OnLoadNewsListListener<T> extends IBaseListener{    /**     * @param list 获取数据成功 拿到集合     */    void onSuccess(List<T> list);}

如果不清楚mvp设计模式的 建议先了解一下 大概30分钟左右 也就差不多了!

另外 lz最近才开始研究 mvp+rxjava+retrofit 有好的资源 记得分享给我 miao2012crazy@163.com 感激不尽!

服务器返回码 可能不同 自己换就行 返回数据格式也可能不同 自己换就行 包括数据处理 基本的注释 也都写在上面了 大家参考着用就行 !
盖楼不易 如果对你有用 给lz点个赞吧!

2 0
原创粉丝点击