讲到MVP,之前已经简单的阐述过我自己对其的理解,现在我写了一个简单的例子,希望可以帮助理解。
我对MVP的理解和认识
例子中用到的 AnnotateUtil.initBindView(this); 以下文章中已经提到:
AnnotateUtil.java 该类的实现代码
UserInfoBean.java
public class UserInfoBean implements Serializable {
private String userName;
private String password;
public UserInfoBean() {
}
public UserInfoBean(String userName, String password) {
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public String getPassword() {
return password;
}
}
Model:
public interface IUserInfoModel {
public UserInfoBean loadLoginData();
public void saveLoginData(String userName, String password) throws Exception;
}
public class UserInfoModel implements IUserInfoModel {
public static Context context;
SharedPreferences share = null;
@Override
public UserInfoBean loadLoginData() {
share = context.getSharedPreferences("User", Context.MODE_PRIVATE);
String jsonResult = share.getString("UserInfo", "");
if (!TextUtils.isEmpty(jsonResult)) {
UserInfoBean userInfo = new Gson().fromJson(jsonResult, UserInfoBean.class);
return userInfo;
}
return null;
}
@Override
public void saveLoginData(String userName, String password) throws Exception {
UserInfoBean userInfoBean = new UserInfoBean(userName, password);
String jsonResult = new Gson().toJson(userInfoBean);
share = context.getSharedPreferences("User", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = share.edit();
editor.putString("UserInfo", jsonResult);
editor.putBoolean("isRegister", true);
editor.commit();
}
}
Presenter:
public class UserInfoPresenter {
private IUserInfoModel iUserInfoModel;
private ILoginActivity mLoginView;
private IRegisterActivity mRegisterView;
public UserInfoPresenter() {
}
public UserInfoPresenter(ILoginActivity mLoginView) {
this.mLoginView = mLoginView;
iUserInfoModel = new UserInfoModel();
}
public UserInfoPresenter(IRegisterActivity mRegisterView) {
this.mRegisterView = mRegisterView;
iUserInfoModel = new UserInfoModel();
}
//处理登录逻辑
public void login(String userName, String password) {
if (userName.isEmpty() || password.isEmpty()) {
mLoginView.loginFail("账号和密码不能为空!");
} else {
UserInfoBean userInfo = iUserInfoModel.loadLoginData();
if (userInfo == null) {
mLoginView.LoginError("用户不存在,请注册!");
return;
}
if (userName.equals(userInfo.getUserName())) {
if (password.equals(userInfo.getPassword())) {
mLoginView.loginSuccess();
} else {
mLoginView.loginFail("密码错误!");
}
} else {
mLoginView.loginFail("用户名错误!");
}
}
}
//处理注册逻辑
public void register(String userName, String password) {
if (userName.isEmpty() || password.isEmpty()) {
mRegisterView.registerFail("账号和密码不能为空!");
} else {
mRegisterView.registerSuccess();
try {
iUserInfoModel.saveLoginData(userName, password);
} catch (Exception e) {
mRegisterView.registerError("数据保存失败!");
}
}
}
}
View:
public interface ILoginActivity {
public void loginSuccess();
public void loginFail(String message);
public void LoginError(String message);
}
public class LoginActivity extends BaseActivity implements ILoginActivity {
private UserInfoPresenter userPresenter;
private SharedPreferences share;
@BindView(id = R.id.edit_UserName)
private EditText editUserName;
@BindView(id = R.id.edit_UserPassword)
private EditText editUserPassword;
@BindView(id = R.id.text_register)
private TextView textToRegister;
@BindView(id = R.id.linear_text_register)
private LinearLayout linearRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_person);
UserInfoModel.context = this;
AnnotateUtil.initBindView(this);
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
share = getSharedPreferences("User", Context.MODE_PRIVATE);
boolean is = share.getBoolean("isRegister", false);
if (is) {
linearRegister.setVisibility(View.GONE);
} else {
linearRegister.setVisibility(View.VISIBLE);
}
userPresenter = new UserInfoPresenter(this);
}
//登录
public void onLogin(View view) {
String userName = editUserName.getText().toString().trim();
String password = editUserPassword.getText().toString().trim();
userPresenter.login(userName, password);
}
//注册
public void onToRegister(View view) {
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
}
@Override
public void loginSuccess() {
showToast("登录成功!");
Intent intent = new Intent(this, MainPrivateActivity.class);
startActivity(intent);
this.finish();
}
@Override
public void loginFail(String message) {
showToast(message);
}
@Override
public void LoginError(String message) {
showToast(message);
}
}
public interface IRegisterActivity {
public void registerSuccess();
public void registerFail(String message);
public void registerError(String message);
}
public class RegisterActivity extends BaseActivity implements IRegisterActivity {
private UserInfoPresenter userPresenter;
@BindView(id = R.id.edit_UserName_register)
private EditText editUserName;
@BindView(id = R.id.edit_UserPassword_register)
private EditText editUserPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
UserInfoModel.context = this;
AnnotateUtil.initBindView(this);
if (Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
getWindow().setStatusBarColor(Color.TRANSPARENT);
}
TextView title = (TextView) findViewById(R.id.text_title_private_bar);
title.setVisibility(View.VISIBLE);
title.setText("注 册");
userPresenter = new UserInfoPresenter(this);
}
//注册
public void onRegister(View view) {
String userName = editUserName.getText().toString().trim();
String password = editUserPassword.getText().toString().trim();
userPresenter.register(userName, password);
}
@Override
public void registerSuccess() {
showToast("注册成功!");
this.finish();
}
@Override
public void registerFail(String message) {
showToast(message);
}
@Override
public void registerError(String message) {
showToast(message);
}
}
希望帮助理解!