Android开发,ZxMvp框架的引入及使用详解(下)
来源:互联网 发布:mac电脑游戏推荐 编辑:程序博客网 时间:2024/06/03 23:43
上一章:Android开发,ZxMvp框架的引入及使用详解(中)
1.ForgetPresenter的书写
上一章我们已经把ForgetModel、ForgetContract写好了,现在我们开始写ForgetPresenter
public class ForgetPresenter extends ForgetContract.Presenter { @Override public void doSendCode(Map<String, String> map) { mModel.sendCodeData(map) .compose(RxHelper.bindToLifecycle(mView)) .subscribe(new RxSubscriber<String>(mView) { @Override protected void _onNext(String s) { if(s.equeals("true"))mView.onSendCodeResult();//随意写的判断 } @Override protected void _onError(String message) { mView.showToast(message); } }); } @Override public void doCheckCode(Map<String, String> map) { mModel.checkCodeData(map) .compose(RxHelper.bindToLifecycle(mView)) .subscribe(new RxSubscriber<CodeEntity>(mView) { @Override protected void _onNext(CodeEntity codeEntity) { mView.onCheckCodeResult(codeEntity); } @Override protected void _onError(String message) { mView.showLoading(message); } }); }}
如上所示,mModel先请求数据,然后绑定生命周期,最后得出返回值。
我们来看不同,上面的sendcode,我们在onnext中拿到了一个string类型的参数。
下面的checkCode我们拿到了一个CodeEntity的参数。
由于上面的发送验证码,我们没有使用BaseResponse+RxHelper的方式,所以虽然我们请求成功了,我们也并不知道请求结果是否为true。
我们就需要从String中去判断,判断里面的Success是否为1。如果成功我们再返回回去
下面的checkCode,我们使用了BaseResponse+RxHelper的方式,所以我们如果走到onnext这一步,就说明我们不仅请求完成了,我们的请求结果还是true,也就是success我们框架已经判断结束,他就是1了。我们可以直接把codeEntity传回去,就无需再次判断了。
另外我们的网络请求使用的是Retrofit。我们如果遇到连续请求,即先调用接口A,然后拿到接口A的返回结果,再拿这个结果作为接口B的参数来进行请求我们可以这样写。
@Override public void doSendCode(Map<String, String> map) { mModel.sendCodeData(map) .flatMap(new Func1<String, Observable<CodeEntity>>() { @Override public Observable<CodeEntity> call(String s) { mView.onSendCodeResult(); return mModel.checkCodeData(map); } }) .compose(RxHelper.bindToLifecycle(mView)) .subscribe(new RxSubscriber<CodeEntity>(mView) { @Override protected void _onNext(CodeEntity s) { mView.onSendCodeResult(); } @Override protected void _onError(String message) { mView.showToast(message); } }); }
这里我就不讲太多了,有需要的可以去学习Retrofit的使用方法。
这里最后一个需要注意的地方如下:
这个位置,可以传入一个mView,也可以不传,如果传入了,那么开始请求的显示dialog和结束请求的取消dialog框架都可以帮你处理。这这里的dialog的方法调用的是BaseActivity或者BaseFragment里面的方法。
public abstract class BaseActivity<T extends BasePresenter, E extends BaseModel> extends RxBaseActivity<T, E> { public ZXSharedPrefUtil mSharedPrefUtil = new ZXSharedPrefUtil(); public Handler handler = new Handler(); @Override public void showToast(String message) { ZXToastUtil.showToast(message); } @Override public void showLoading(String message) { ZXDialogUtil.showLoadingDialog(this, message); } @Override public void dismissLoading() { ZXDialogUtil.dismissLoadingDialog(); }}
而这里我默认的调用的ZxUtils里面的dialog。你们如果有需要可以改成自己的方法。
2.FoegetActivity的书写
下面就是最后一个地方了。view层的书写。
首先,我们知道我们发送验证码,和检查验证码都是两个按钮的点击事件。
@OnClick({R.id.back_bt, R.id.btn_next}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.back_bt: mPresenter.doSendCode(ApiParamUtil.getSendCodeInfo()); break; case R.id.btn_next: mPresenter.doCheckCode(ApiParamUtil.getCheckCodeInfo()); break; } }这里用到了注解,我不仔细讲了。
主要看我们开始请求的方法。
mPrenster.doSendCode()
这里我们调用了presenter里面的发送验证码的接口。
这个接口我们需要传入一个map进去,我这里用了ApiParamsUtil进行了封装,如下:
public class ApiParamUtil { //登录 public static Map<String, String> getLoginDataInfo(String userName, String userPwd) { Map<String, String> map = new HashMap<>(); map.put("sys_type", "member"); map.put("Account", userName); map.put("phone", userName); map.put("loginPwd", userPwd); return map; } public static Map<String, String> getSendCodeInfo() { Map<String, String> map = new HashMap<>(); return map; } public static Map<String, String> getCheckCodeInfo() { Map<String, String> map = new HashMap<>(); return map; }}这里的登录,是我举的例子。大家明白使用方法即可。
好的,开始请求就已经完成了。
接下来就是拿到结果。
因为我们在ForgetContract的View接口中写了两个方法,这里我们需要实现一下。
@Override public void onSendCodeResult() { showToast("验证码已发送");// LoginActivity.startAction(this,true, "test",false); } @Override public void onCheckCodeResult(CodeEntity codeEntity) { //这里确认验证成功了 就可以跳转到改密码界面了 }如上,这里我们就已经拿到了结果了,在这里我们就可以执行我们想要的操作了。
至此,我们的一套流程就算结束了。
相比起以前的mvc我们不难发现,mvp中进行一个请求真的麻烦的不是一点半点。
但是我们也能看到,mvp中每个模块都各行其是,代码一路了然。只要将contrct书写完毕,我们就可以按部就班的将其他的内容轻松写好。
在以后遇到修改的时候,也能很快的完成修改。
到此差不多就结束了,如果各位在使用中遇到了什么问题,欢迎提出来。
另外如果对框架有修改意见,也欢迎提出来,我会尽快进行修改。
- Android开发,ZxMvp框架的引入及使用详解(下)
- Android开发,ZxMvp框架的引入及使用详解(上)
- Android开发,ZxMvp框架的引入及使用详解(中)
- Android开发框架及注解的使用
- Android引入即用的便捷开发框架WelikeAndroid
- Android引入即用的便捷开发框架WelikeAndroid
- Android ButterKnife依赖注入框架的引入和使用
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android 最火的快速开发框架AndroidAnnotations使用详解
- Android平台下驱动的开发及测试框架概述(一)
- 初学AJAX总结
- 欢迎使用CSDN-markdown编辑器
- Eclipse中更换Maven默认中心仓库的方法
- 解决Sublime 3 Windows环境下 python 无法输入的问题
- 设计师如何制定设计原则
- Android开发,ZxMvp框架的引入及使用详解(下)
- 开启MySQL performance_schema后对性能的影响
- 搭建ELK(ElasticSearch+Logstash+Kibana)日志分析系统(六) ElasticSearch demo演示
- 【Gradle Build Tool 4.1用户指南】Chapter 3. Installing Gradle 第三章、安装Gradle
- 基于NCO3.0的SapRfcFunction测试工具开发之一
- 争取实现自己的小目标:向Siki老师要一张签名照 (17.09.14)
- SGISTL源码探究-stack配接器
- Web 开发模式演变历史和趋势
- 图像颜色增强算法Opencv