引子:M层之前大同小异,可以参考以前博客~
在这里我们使用okgo 代替okHttp 使用非常简便
public class LoginModel {
public void login(String mobile, String password, final LoginModelCallBack
loginModelCallBack) {
String loginUrl = "http://www.zhaoapi.cn/user/login?mobile=" + mobile + "&password=" +
password;
OkGo.get(loginUrl).execute(new StringCallback() {
@Override
public void onSuccess(Response response) {
//响应数据
UserBean userBean = new Gson().fromJson(response.body().toString(), UserBean.class);
if (userBean.getCode().equals("0")) {
loginModelCallBack.getSuccess(userBean);
} else {
loginModelCallBack.getFaid("请求失败");
}
}
});
}
//接口回调
public interface LoginModelCallBack {
void getSuccess(UserBean userBean);
void getFaid(String error);
}
}
为了降低耦合 我们使用了Dagger2–需要在p层实例化m层之前操作
@Module
public class LoginModule {
@Provides
public LoginModel getLoginModel() {
//提供对象
return new LoginModel();
}
}
接下来写桥梁链接 类似于注射器
@Component(modules = LoginModule.class)//提供
public abstract class LoginCompontent {
public abstract void loginInject(LoginPresenter loginPresenter);//使用
}
书写P层之前,需要强调一下,为了减少内存的消耗 我们在使用m层时软引用包裹会更好
public abstract class BasePresenter {
protected V view;
private final SoftReference vSoftReference;
public BasePresenter(V view) {
//软引用包裹
vSoftReference = new SoftReference<>(view);
this.view = view;
initModel();
}
protected abstract void initModel();
void onDestroy() {
view = null; //减少内存溢出时调用
}
}
使用了Dagger2
public class LoginPresenter extends BasePresenter {
@Inject
LoginModel loginModel;
public LoginPresenter(DataCall view) {
super(view);
}
@Override
protected void initModel() {
//耦合性处理
DaggerLoginCompontent.builder().loginModule(new LoginModule()).build().loginInject(this);
// new LoginModel();
}
public void login(String mobile, String password) {
loginModel.login(mobile, password, new LoginModel.LoginModelCallBack() {
@Override
public void getSuccess(UserBean userBean) {
view.onResponse(userBean);
}
@Override
public void getFaid(String error) {
view.ShowError(error);
}
});
}
}
顺便提一下 需要注意的地方
当使用butterKnife初始化控件时,fragment.adapter都需要做一个视图的绑定
使用brvah时 不可缺少的就是导入gradle文件–allprojects 下
//绑定视图-bind传入绑定的类对象,绑定视图
ButterKnife.bind(this, view);
//gradle导入
maven { url "https://jitpack.io" }