android MVP 实践笔记
2016-06-01 15:08
465 查看
我是这样理解的
首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示loading和隐藏而已。
那我就先写个interface -RegistView
RegistView
有了接口就要实现他了,那就简单了,写个manager管理类, 这里面是真正的业务处理,所有的异步操作放在这里执行。比如登录 ,注册,获取验证码。
LoginAndRegistMananger
然后再写个presenter类 这个是activity层 获得数据的(我是这样子理解的)
LoginAndRegistPresenter实现
最后就是使用了 在登陆界面
只需要实现loginview
然后调用 LoginAndRegistPresenter 实现登陆功能
注册界面同理
以上是我自己本人今天看了下mvp的设计模式 我所领悟的。 做个笔记,还希望大家多多指教
欢迎大家加入我的qq交流群 74406192
首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示loading和隐藏而已。
那我就先写个interface -RegistView
RegistView
/** * 注册视图 * Created by wushange on 2016/06/01. */ public interface RegistView { /** * 获取验证码成功 */ void OnShowSuccessGetCodeView(); /** * 获取验证码失败 */ void OnshowFailGetCodeView(); /** * 注册成功 * * @param user */ void onShowSuccessRegistView(String user); /** * 注册失败 */ void onShowFailedRegistView(); /** * 显示loading */ void showLoadingView(); /** * 隐藏loading */ void dissLoadingView(); }
有了接口就要实现他了,那就简单了,写个manager管理类, 这里面是真正的业务处理,所有的异步操作放在这里执行。比如登录 ,注册,获取验证码。
LoginAndRegistMananger
import com.dmcc.dmcc_crm.bean.User; import org.xutils.common.util.LogUtil; /** * 业务处理层 */ public class LoginAndRegistMananger { /** * 获取验证码回掉 * 需要什么参数自己添加就可以 */ public interface OnGetCodeLisener { void getCodeSuccess(); void getCodeFail(); } /** * 注册相关 回掉 * 需要什么参数自己添加就可以 */ public interface OnRegistLisener { void registSuccess(String user); void registFailed(); } /** * 登录相关 回掉 * 需要什么参数自己添加就可以 */ public interface OnLoginListener { void loginSuccess(User user); void loginFailed(); } public void getCode(final String phone, final OnGetCodeLisener onGetCodeLisener) { LogUtil.e("---模拟子线程耗时操作----"); new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } LogUtil.e("--- 模拟获取验证码成功----"); onGetCodeLisener.getCodeSuccess(); } }.start(); } public void regist(final String username, final String password, final String code, final OnRegistLisener onRegistLisener) { LogUtil.e("---模拟子线程耗时操作----"); new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } LogUtil.e("--- 模拟注册成功----"); onRegistLisener.registSuccess("注册成功"); } }.start(); } public void login(final String username, final String password, final OnLoginListener loginListener) { LogUtil.e("---模拟子线程耗时操作----"); new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } LogUtil.e("--- 模拟登录成功----"); if ("111".equals(username) && "111".equals(password)) { User user = new User(); user.setUserName(username); user.setPassword(password); loginListener.loginSuccess(user); } else { loginListener.loginFailed(); } } }.start(); }
然后再写个presenter类 这个是activity层 获得数据的(我是这样子理解的)
LoginAndRegistPresenter实现
import com.dmcc.dmcc_crm.bean.User; import com.dmcc.dmcc_crm.view.LoginView; import com.dmcc.dmcc_crm.view.RegistView; /** * p层 */ public class LoginAndRegistPresenter { RegistView registView; LoginView loginView; LoginAndRegistMananger loginAndRegistMananger; /** * 登陆界面构造器 * * @param loginView */ public LoginAndRegistPresenter(LoginView loginView) { this.loginView = loginView; this.loginAndRegistMananger = new LoginAndRegistMananger(); } /** * 注册界面构造器 * * @param registView */ public LoginAndRegistPresenter(RegistView registView) { this.registView = registView; this.loginAndRegistMananger = new LoginAndRegistMananger(); } /** * 获取验证码 * @param phone */ public void getCode(String phone) { registView.showLoadingView(); loginAndRegistMananger.getCode(phone, new LoginAndRegistMananger.OnGetCodeLisener() { @Override public void getCodeSuccess() { registView.OnShowSuccessGetCodeView(); registView.dissLoadingView(); } @Override public void getCodeFail() { registView.OnshowFailGetCodeView(); registView.dissLoadingView(); } }); } /** * 注册 * @param name * @param password * @param code */ public void regist(String name, String password, String code) { registView.showLoadingView(); loginAndRegistMananger.regist(name, password, code, new LoginAndRegistMananger.OnRegistLisener() { @Override public void registSuccess(String user) { registView.onShowSuccessRegistView(user); registView.dissLoadingView(); } @Override public void registFailed() { registView.onShowFailedRegistView(); registView.dissLoadingView(); } }); } /** * 登录 * @param name * @param password */ public void login(String name, String password) { loginView.showLoadingView(); loginAndRegistMananger.login(name, password, new LoginAndRegistMananger.OnLoginListener() { @Override public void loginSuccess(User user) { loginView.onShowSuccessLoginView(user); loginView.dissLoadingView(); } @Override public void loginFailed() { loginView.onShowFailedLoginView(0); loginView.dissLoadingView(); } }); } }
最后就是使用了 在登陆界面
只需要实现loginview
然后调用 LoginAndRegistPresenter 实现登陆功能
/** * Created by wushange on 2016/06/01. */ public class LoginActivity extends BaseSwipeBackActivity implements LoginView { LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this); @ViewInject(R.id.login_btn) Button login; @ViewInject(R.id.go_reg_btn) Button go_reg_btn; @ViewInject(R.id.apptitle) AppTitle appTitle; @Override public int bindLayout() { return R.layout.activity_login_main_view; } @Override public void initView(View view) { appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE); appTitle.setTitle("登陆"); appTitle.setBackClickClisener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } @Override public void doBusiness(Context mContext) { } @Event(R.id.login_btn) private void setLogin(View v) { LogUtil.e("---setLogin----"); mloginPresenter.login("111", "111"); } @Event(R.id.go_reg_btn) private void setGo_reg_btn(View v) { AppUtils.startAct(getContext(), RegistActivity.class); } @Override public void onShowSuccessLoginView(User user) { LogUtil.e("---onShowSuccessLoginView----" + user.toString()); } @Override public void onShowFailedLoginView(int error) { LogUtil.e("---onShowFailedLoginView----"); } @Override public void showLoadingView() { LogUtil.e("---showLoginView----"); } @Override public void dissLoadingView() { LogUtil.e("---dissLoginView----"); } }
注册界面同理
/** * Created by wushange on 2016/06/01. */ public class RegistActivity extends BaseSwipeBackActivity implements RegistView { LoginAndRegistPresenter mloginPresenter = new LoginAndRegistPresenter(this); @ViewInject(R.id.regist_btn) Button regist; @ViewInject(R.id.getcode_btn) Button getcode_btn; @ViewInject(R.id.apptitle) AppTitle appTitle; @Override public int bindLayout() { return R.layout.activity_regist_main_view; } @Override public void initView(View view) { appTitle.init(AppTitle.AppTitleStyle.BACK_TITLE); appTitle.setTitle("注册"); appTitle.setBackClickClisener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } @Override public void doBusiness(Context mContext) { } @Event(R.id.regist_btn) private void setRegist(View v) { mloginPresenter.regist("111", "111", "1"); } @Event(R.id.getcode_btn) private void setGetcode_btn(View v) { mloginPresenter.getCode("1564594066"); } @Override public void onShowSuccessRegistView(String user) { LogUtil.e("--onShowSuccessRegistView---" + user); } @Override public void onShowFailedRegistView() { LogUtil.e("--onShowFailedRegistView---"); } @Override public void OnShowSuccessGetCodeView() { LogUtil.e("--OnShowSuccessGetCodeView---"); } @Override public void OnshowFailGetCodeView() { LogUtil.e("--OnshowFailGetCodeView---"); } @Override public void showLoadingView() { LogUtil.e("--showLoadingView---"); } @Override public void dissLoadingView() { LogUtil.e("--dissLoadingView---"); } }
以上是我自己本人今天看了下mvp的设计模式 我所领悟的。 做个笔记,还希望大家多多指教
欢迎大家加入我的qq交流群 74406192
相关文章推荐
- android6.0锁屏界面接收新通知处理流程
- 欢迎使用CSDN-markdown编辑器
- android ontouch和onclick冲突处理
- Android:安卓Touch事件分发机制
- allowbackup的作用
- Android中的进程和线程
- Android性能优化之布局优化
- Android系统自带样式(android:theme)
- android记录一
- Android popwindow的back拦截
- EventBus3.0详解
- Android开发笔记——TextView的高级应用之文本的淡入淡出
- 自定义ProgressBar
- WFD+视频分辨率 在OMX中判断
- android 游戏 实战打飞机游戏 BOSS的设计 以及胜利失败页面(6结束)
- Fragment的基础认知和基本使用
- Android之界面刷新 View更新 Invalidate和postInvalidate的区别
- 浅析Android中的消息机制-解决:Only the original thread that created a view hierarchy can touch its views. .
- android背景透明导致能看到桌面解决方案
- Android群英转读书笔记第七章(Android动画机制与使用技巧)