我们的场景是大概实现一个基本的登录请求,然后将数据返回给View层
一,Model 负责数据的获取,并返回给Presenter
获取数据的Model
public class LoginRequest {
public String username;
public String password;
public void queryData(LoginView view) {
LoginResult result = new LoginResult();
result.isSucess = 1;
result.result = "成功啦";
view.onLoginResult(result);
}
}
二,View 负责数据的展示等等
1,首先是定义一个BaseView,其实就是一个空接口,代表一个View对象
public interface IBaseView {
}
2,定义一个登录View
public interface LoginView<E> extends IBaseView {
void onLoginResult(E result);
}
3,具体做业务逻辑的对象,实现LoginView
public class LoginActivity extends AppCompatActivity implements LoginView<LoginResult> {
private LoginPresenter mLoginPersenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mLoginPersenter = new LoginPresenter(this);
mLoginPersenter.attach(this);
findViewById(R.id.btn_login).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginRequest r = new LoginRequest();
r.username = "user";
r.password = "password";
mLoginPersenter.loginRequest(r);
}
});
}
@Override
public void onLoginResult(LoginResult result) {
if(result.isSucess == 1) {
Toast.makeText(getApplicationContext(), result.result, Toast.LENGTH_SHORT).show();
}
}
}
LoginPresenter下面第三步会介绍到
三,Presenter 负责向Model请求数据,并且返回给View
1,定义一个BasePresenter提供一些公共方法
public abstract class BasePresenter<E extends IBaseView> {
private Context mContext;
public BasePresenter(Context context) {
this.mContext = context;
}
public E mView;
public void attach(E e) {
mView = e;
}
public void onDestory(){
mContext = null
}
}
2,定义上一步提到的LoginPresenter,
public class LoginPresenter extends BasePresenter<LoginView> {
public LoginPresenter(Context context) {
super(context);
}
public void loginRequest(LoginRequest reuest) {
reuest.queryData(mView);
}
@Override
public void onDestory() {
super.onDestory();
}
}
四,数据的类型
public class LoginResult {
public int isSucess;
public String result;
}
以上就是MVP实现的相关代码。如有更好的方案,欢迎留言