参考:Android MVP 架构 - 简书

MVP优点:1.代码简洁
            2.降低耦合,方便维护

MVP的使用使activity中的网络请求剥离出来,成为model、presenter。
model只负责网络请求,presenter负责处理请求网络后的数据处理:加载中 成功 失败 取消加载等,最后view进行界面的展示    

MVP在实现代码简洁的同时,额外增加了大量的接口、类,不方便进行管理,于是Contract就登场了
Contract 契约、协议,主要是用于将model、presenter、view进行约束管理,方便后期类的查找维护。

下面是自己总结的伪代码:

在contract中定义MVP的接口:

public interface Contract{interface Model{//例如一个登录方法 随便写的几个登录参数void setLogin(String phone,String pwd,String loginBean,ApiCallBack<LoginBean>callback)}interface View{void LoginSuccess(LoginBean loginBean)void LoginFail(String errMsg)}interface Presenter{void setLogin(String phone,String pwd)}}

在model中请求网络数据:

public class Model implements Contract.Model{//实现contract中的model中的方法@SuppressLint("CheckResult")@Overridepublic void setLogin(String phone,String pwd,String loginBean,final ApiCallBack<LoginBean>callback){//进行网络请求ApiUtils.getApi().login(phone,pwd).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<ResponseBean<LoginBean>>() {@Overridepublic void accept(ResponseBean<LoginBean> loginBeanResponseBean) throws Exception {callBack.onResponse(loginBeanResponseBean);}}, new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) throws Exception {callBack.onFailure(throwable);}});}}

在presenter中处理请求网络后的数据:

public class Presenter extends BasePresenter<Contract.View> implements Contract.Presenter{private Model model;//重写一个构造方法public Presenter(Contract.View view){super(view);model =new Model();}@Overridepublic void setLogin(String phone,String pwd){LoginBean loginBean = new LoginBean();loginBean.setPhone(phone);loginBean.setPassword(pwd);String loginjson;Gson gson=new Gson();loginjson=gson.toJson(loginBean);model.setLogin(  phone,  loginjson, new ApiCallBack<LoginBean>() {@Overrideprotected void onSuccess(LoginBean responseData, String message) {if (getView() != null) {getView().LoginSuccess(responseData);}}@Overrideprotected void onFailure(String error) {if (getView() != null) {getView().LoginFail(error);}}});}}

在View中展示界面:

public class View implement Contract.View{private Presenter mPresenter;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在初始化方法中实例化这个presentermPresenter = new Presenter(this);loginBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//然后在登录按钮的点击方法中调用mPresenter.setLogin(phone,pwd)}});}//最后再实现Contract中View中的方法@Overridepublic void LoginSuccess(LoginBean loginBean) {//做登录成功的操作 记录个人信息 跳转主页等}@Overridepublic void LoginFail(String errMsg) {//提示用户错误信息 toast或者dialog形式}}

BasePresenter是对Presenter的封装:

import java.lang.ref.WeakReference;public class BasePresenter<View> {private WeakReference<View> mViewWeakReference;public BasePresenter(View view) {mViewWeakReference = new WeakReference<>(view);}public void detach() {if (mViewWeakReference != null) {mViewWeakReference.clear();mViewWeakReference = null;}}public View getView() {return mViewWeakReference == null ? null : mViewWeakReference.get();}}

Android MVP架构简析相关推荐

  1. Qualcomm Android camera 架构简析及如何debug

    一. Camera模组(CCM)介绍: CCM一般包含四大件: 镜头(lens).传感器(sensor).软板(FPC).图像处理芯片(DSP):     Camera的成像原理可以简单概括如下: 1 ...

  2. Android Vold 架构简析

    这篇文章中主要是分析一下,android系统里面的Vold--Vold是andorid系统的设备管理器,扮演着linux里面的udev的角色.它通过监听uevent的端口,取得 uevent事件,di ...

  3. android架构+vold,Android Vold 架构简析

    李力琼(joni.kartorz.lee@gmail.com)软件工程师,热爱并致力于Linux平台的开源软件的开发,你可以用email与他联系.本文中Andorid系统的版本为4.3及以上. --- ...

  4. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  5. Android MVP架构从入门到精通-真枪实弹

    Android MVP架构从入门到精通-真枪实弹 一. 前言 二. MVC架构 1. MVC架构优缺点 A. 缺点 B. 优点 三. MVP架构 1. MVP架构优缺点 A. 缺点 B. 优点 四. ...

  6. Android Telephony框架结构简析

    Android Telephony涉及的框架结构如图1所示. 图1  Android Telephony框架结构 通过图1可以发现Android Telephony框架结构的一些规律,具体如下. An ...

  7. 谈谈 Android MVP 架构 | 掘金技术征文

    前言:本文所写的是博主的个人见解,如有错误或者不恰当之处,欢迎私信博主,加以改正!原文链接,demo链接 MVP 架构简介 说起 MVP 架构,相信很多朋友都看过,网上也有很多这方面的资料.博主使用 ...

  8. android mvp框架基类,Android MVP架构项目搭建封装,基类封装

    综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...

  9. Android 启动过程简析

    首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...

  10. Android MVP架构模式

    目录 概述 实例 Model View Presenter 后记 全部代码 Model View Presenter 概述 MVP模式是Android常见的的一种架构模式,全称是Model.View. ...

最新文章

  1. mysql 数据类型 int_MySQL数据类型 int(M) 表示什么意思?
  2. win10中的ubuntu子系统忘记root密码如何修改
  3. .net mvc 超过了最大请求长度 限制文件上传大小
  4. powerpoint预览_如何安排PowerPoint幻灯片的时间以进行更有效的演示
  5. flume 写入文件服务器,Flume环境配置以及基本操作
  6. 报表传值,主表隐藏id样式设置
  7. 1001 Hello,World!
  8. 音视频直播推流和拉流到底是什么意思?
  9. java rxtx version_RXTX Version mismatch
  10. STM32高速脉冲发波方案
  11. Microsoft Visual C++ Build Tools下载/解决Visual C++ 14.0 is required问题
  12. MySql in子句 效率低下优化
  13. signature=cc8d613f503e9b933c233da06afc0fc6,襄阳市公安局交通警察支队违法车辆信息公告20210118...
  14. win7如何修复wmi服务器,WMI服务是什么?Win7系统禁用WMI服务的方法
  15. java-贪吃蛇小游戏
  16. 瑞利 随机 matlab,matlab产生瑞利分布随机信号
  17. node服务端生成七牛token
  18. 2017年全国研究生电子设计大赛上海赛区感触
  19. 紫光武汉新芯珠联璧合 引领存储“芯”篇章
  20. oracle显示人民币,请问如何讲数字转变为大写人民币格式

热门文章

  1. PTA 判断上三角矩阵
  2. 2个方法解决PDF转成WORD
  3. kotlin-android-extensions扩展的导入
  4. 【笔记篇】01初识供应链——之《实战供应链》
  5. 前端使用js来获取ip起始和结束地址
  6. uniapp小程序解压压缩包 (使用jszip)
  7. 数学建模相关知识梳理
  8. 设置谷歌浏览器的flash 插件
  9. mysql修改字段默认值_Mysql 修改字段默认值
  10. 软件构造笔记——Java基本数据类型和对象数据类型