1.首先创建moudel层的接口:MyModelPort
public interface MyModelPort {
void onSuccess(Object o);
void onFailed(Exception e);
}
2.创建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);
}
}
3.创建vlid层接口 :ViewCallBack
public interface ViewCallBack {
void onSuccess(Object o);
void onFailed(Exception e);
}
4.创建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;
}
}
5.在v层实现v层接口:ViewCallBack 重写加载成功和失败的方法
6.在主方法中创建p层方法的对象执行getDate方法获取网络数据,这个方法需要传递三个参数,第一个是请求的网络路径(String类型),第二个参数是map集合是为了方便动态拼接用的,如果没有就创建一个空map集合,第三个参数是bean类,是网路路径想对应的bean类,
//创建层的对象
myPresenter = new MyPresenter(this);
//调用p层的方法传递参数
myPresenter.getDate(path1,map, Date2.class);
7.最后解决mvp内存溢出的问题,在onDestroy方法中调用p层detach()方法来解除绑定
@Override
protected void onDestroy() {
super.onDestroy();
myPresenter.detach();
}