android MVP 实践笔记
来源:互联网 发布:网络电子游艺坑人 编辑:程序博客网 时间:2024/05/16 19:20
我是这样理解的
首先一个界面先看看需要哪些操作 ,已注册登录为例子
注册界面 一般有获取验证码,和注册的操作。界面上大概就是这几种,获取验证码成功,失败,注册成功失败,显示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
0 0
- android MVP 实践笔记
- Android MVP模式实践
- Android Mvp实践
- Android Mvp实践
- Android MVP解析实践
- android MVP实践
- android 官方mvp实践
- Android开发MVP模式实践
- android MVP设计模式实践
- Android开发MVP模式实践
- Android MVP模式初次实践
- Android MVP模式初次实践
- Android MVP模式笔记
- Android MVP学习笔记
- Android MVP模式简单理解与实践
- Google 官方Android MVP架构实践
- Android MVP 实践 Dagger + activity/fragment + viewDelegate
- Android MVP+Retrofit+RxJava实践小结
- 写一个递归函数,用来输出n个元素的所有子集。
- 日志审计-apache攻击日志分析
- SoftReference
- 解决:The proxy server received an invalid response from an upstream server
- XStream解析xml数据
- android MVP 实践笔记
- MySql避免重复插入记录
- 银行不良资产问题日益严重,政府需挑选出来:辛哈
- sybase服务器启动时报错:无法启动服务器,错误1053:服务没有及时相应启动或控制请求
- iOS开发Xcode6添加.pch
- C# 获取图片某像素点RGB565值
- POJ1270【拓扑排序+DFS】
- Mysql学习——MySQL导入导出.sql文件及常用命令
- Jacob操作office文档(Word,PPT,Excel)