您的位置:首页 > 其它

一个简单的MVP小例子

2017-08-04 16:37 260 查看
讲到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);
}
}


希望帮助理解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: