一个简单的MVP小例子
2017-08-04 16:37
260 查看
讲到MVP,之前已经简单的阐述过我自己对其的理解,现在我写了一个简单的例子,希望可以帮助理解。
我对MVP的理解和认识
例子中用到的 AnnotateUtil.initBindView(this); 以下文章中已经提到:
AnnotateUtil.java 该类的实现代码
希望帮助理解!
我对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); } }
希望帮助理解!
相关文章推荐
- 使用Eclipse+maven3插件开发一个Servlet3.0的简单例子
- 整合Struts2,Hibernate和Spring的一个简单例子
- 一个简单的Linux下Client/Server应答例子
- 一个App架构例子分析--UI层使用MVP模式;各层之间使用Otto实现通信
- 一个简单的LINQ TO SQL的三层架构的例子
- 关于ExpandableListView用法的一个简单小例子
- 一个简单的安卓+Servlet图片上传例子
- 一个简单的ATL的例子 url
- Appium+Robotframework实现Android应用的自动化测试-6:一个简单的例子
- Spring MVC中使用SimpleUrlHandlerMapping映射处理器的一个简单例子
- 关于ExpandableListView用法的一个简单小例子
- C# hook的一个简单例子
- 一个简单的排序例子理解闭包作为参数
- webwork一个简单的例子
- 一个JDBC事务处理的简单例子
- 以一个最简单的例子把OO的JavaScript说明白
- jquery下拉菜单怎么做,一个简单的纯手写例子
- 一个简单的生产者与消费者的多线程例子(二):不让消费者或生产者无限期地等待
- 【Linux】一个简单的线程创建和同步的例子
- 关于ExpandableListView用法的一个简单小例子