- 首先创建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.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);
}
}
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);
myPresenter.getDate(path1,map, Date2.class);
- 最后解决mvp内存溢出的问题,在onDestroy方法中调用p层detach()方法来解除绑定
@Override
protected void onDestroy() {
super.onDestroy();
myPresenter.detach();
}