MVP模板(只需要在v层传递三个参数,url路径,map需要拼接的路径,bean类跟url相对应的)OkHttp请求

  • 首先创建moudel层的接口:MyModelPort
public interface MyModelPort {
    void onSuccess(Object o);
    void onFailed(Exception e);
}
  • 创建Moudle层的实现类,用来请求数据(这里使用的kohttp)MyModel

public class MyModel  {
    //请求数据的的方法

    /**
     *
     * @param url 网络路径
     * @param map 网络请求要拼接的参数
     * @param c 需要解析的bean类
     * @param myModelPort m层的接口,方便请求成功和失败时调用传值
     */
   public void requestDate(String url, Map<String,String> map,Class c,final MyModelPort myModelPort){
           //这里的httpUtils是我的Ok二次封装类,封装的get方法需要4个参数
           //url路径,map集合,接口,bean类
           HttpUtils.getInstance().get(url, map, new CallBack() {

               @Override
               public void onSuccess(Object o) {
                   //将请求成功的数据返回回去
                myModelPort.onSuccess(o);
               }
                //异常
               @Override
               public void onFailed(Exception e) {
                   myModelPort.onFailed(e);
               }
           },c);

   }
}
  • 创建vlid层接口 :ViewCallBack
public interface ViewCallBack {
    void onSuccess(Object o);
    void onFailed(Exception e);
}
  • 创建presenter层接口:MyPresenter

public class MyPresenter {
    private ViewCallBack callBack;

    public MyPresenter(ViewCallBack callBack) {
        this.callBack = callBack;
    }
     MyModel myModel =new MyModel();
    /**
     * @param url 网络路径
     * @param map 网络请求要拼接的参数
     * @param c 需要解析的bean类
     */
    public void getDate(String url, Map<String,String> map,Class c){
        myModel.requestDate(url, map, c, new MyModelPort() {
            @Override
            public void onSuccess(Object o) {
                callBack.onSuccess(o);
            }

            @Override
            public void onFailed(Exception e) {
                callBack.onFailed(e);
            }
        });
    }
    /**
     * 防止内存泄露
     * */
    public void detach(){
        callBack=null;
    }
}
  • 在v层实现v层接口:ViewCallBack 重写加载成功和失败的方法
  • 在主方法中创建p层方法的对象执行getDate方法获取网络数据,这个方法需要传递三个参数,第一个是请求的网络路径(String类型),第二个参数是map集合是为了方便动态拼接用的,如果没有就创建一个空map集合,第三个参数是bean类,是网路路径想对应的bean类,
    //创建层的对象
     myPresenter = new MyPresenter(this);
     //调用p层的方法传递参数
     myPresenter.getDate(path1,map, Date2.class);
  • 最后解决mvp内存溢出的问题,在onDestroy方法中调用p层detach()方法来解除绑定
@Override
    protected void onDestroy() {
        super.onDestroy();
        myPresenter.detach();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值