为什么80%的码农都做不了架构师?>>>   

前言

根据网络上的MVP套路写了一个辣鸡MVP DEMO

用到的

  • android studio MVPHelper插件,方便自动生成框架代码
  • rxjava
  • retrofit

什么是MVP

MVP就是英文的Model View Presenter,然而实际分包并不是只有这三个包,还有一个契约Contract接口包,根据项目情况还可以分更多包

  • Contract
  • Model
  • View 指activity和fragment,需要实现View接口
  • Presenter

Contract

定义Model、View、Presenter接口的方法,所有接口都在这里定义

public interface HomeContract {interface Model {void getDate(final BaseCallBack<TitleListBean> callBack);}interface View {//多个事件定义多个刷新页面方法void refreshUi(List<TitleListBean.ContentsBean> list);}interface Presenter {void load();}
}

Model

网络及本地数据请求操作,包括远程数据和本地数据的请求处理
远程数据用retrofit+rxjava实现,本地数据用room+rxjava,无论用什么方法最后都要通过callback返回结果

public class HomeModel implements HomeContract.Model {//获取数据public void getDate(final PresenterBaseCallBack<TitleListBean> callBack) {ApiService apiService = RetrofitUtil.getRetorfit().create(ApiService.class);apiService.getList().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new BaseObserver<TitleListBean>() {@Overridepublic void onNext(TitleListBean model) {Log.d(TAG, "获取数据成功 ");callBack.onResponse(model); //成功的数据请求结果}@Overridepublic void onError(Throwable e) {e.printStackTrace(); //请求过程中发生错误callBack.onFailure("获取数据失败"); //失败的数据请求结果}@Overridepublic void onComplete() {Log.d(TAG, "刷新页面 ");}});}
}

Presenter

可以理解为界面的点击、加载等事件的实现
作为view与model的桥梁,初始化的时候需要传入view对象和new一个model对象
通过view调用presenter,presenter调用model,model返回数据给presenter,presenter再返回数据给view展示

public class HomePresenter implements HomeContract.Presenter {private HomeContract.View homeView;private HomeContract.Model homeModel;private Context mContext;public HomePresenter(HomeContract.View view) {this.homeView = view;this.homeModel = new HomeModel();}@Overridepublic void load() {/*** Presenter层逻辑处理* Presenter已经包含model与view对象* 1.通过model获取数据,new一个callback对象作为参数* 2.callback对象根据model返回的结果执行view的refreshUi方法刷新页面*/this.homeModel.getDate(new PresenterBaseCallBack<TitleListBean>() {@Overridepublic void onResponse(TitleListBean response) {homeView.refreshUi(response.getContents());}@Overridepublic void onFailure(String error) {}});}
}

CallBack

这个接口属于Presenter层,也是model与view的桥梁,把model处理的结果告诉presenter,presenter根据处理结果告诉view刷新页面

public interface PresenterBaseCallBack<T> {void onResponse(T response);void onFailure(String error);
}

VIEW

创建presenter对象,view的所有事件就是对应presenter的方法

public class HomeFragment extends BaseFragment implements HomeContract.View {private HomeContract.Presenter presenter;@Overrideprotected void initView(Bundle savedInstanceState) {presenter = new HomePresenter(this,getContext());   //初始化Presenter,包含view和modelpresenter.load();                                   //Presenter层逻辑处理}@Overridepublic void refreshUi(List<TitleListBean.ContentsBean> list) {  //数据获取成功后的页面刷新//list 就是返回的数据,执行页面刷新}
}

一个辣鸡Demo

戳这里

转载于:https://my.oschina.net/AStar/blog/2244802

Android MVP 框架相关推荐

  1. Android MVP框架学习

    什么是MVP框架 做Android开发也有好几年时间了,最近接触了Android开发的MVP模式,MVP即Model.View.Presenter的缩写.如果有过一些项目开发经验的人,在项目功能越来越 ...

  2. Android MVP框架MVPro的使用和源码分析

    最近看了两篇关于Android实现MVP的文章一种在android中实现MVP模式的新思路和用MVP架构开发Android应用. 两篇文章的思路都是一样的,即把Activity.Fragment作为P ...

  3. Android MVP框架实现过程

    MVP框架实现过程 目的:View层和Model层分离,中间由Presenter处理逻辑. Prester作为View与Model交互的中间纽带,处理与用户交互的负责逻辑.这里我们只说明View和Pr ...

  4. android MVP框架

    尝试使用MVVM开发模式,让程序解耦. MVVM开发模式图: 优势 模型与视图完全分离,我们可以修改视图而不影响模型: 可以更高效地使用模型,因为所有的交互都发生在一个地方--Presenter内部: ...

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

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

  6. Android MVP框架搭建

    1. 自定义全局配置文件 创建全局自定义配置文件 config.gradle,拆分配置,便于依赖引用管理: 全局 build.gradle 引入自定义配置文件 2. 创建common module, ...

  7. Android MVP 详解(上)

    作者:李旺成 时间:2016年4月3日 "Android MVP 详解(下)"已经发布,欢迎大家提建议. MVP 在 Android 上的使用其实已经有挺长一段时间了,长到似乎有点 ...

  8. android 最新框架组合,android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面...

    目录 1 前言 虽然在标题上,自己很随意的起了这么一个名字.其实并不是说它起个英文名就牛逼了.说白了,它其实就是mvp的思想加了lifecycle-component,然后加入了分层的思想,最后用Ty ...

  9. Android MVP伴侣,Nucleus框架使用简介

    Neclues是一款基于MVP框架的Android Library, 它合理地将程序中的可视化界面和后台线程联系起来. 如果你还不了解MVP框架,请点击查看详情 框架介绍 我们在应用中使用MVP和Rx ...

最新文章

  1. 【MIT港科大】最新《贝叶斯深度学习》2020综述论文,35页pdf全面阐述最新进展...
  2. Pacemaker+Corosync PostgreSQL流复制HA的部署(pha4pgsql)
  3. system文件_解压MIUI 10 升级包 system.new.dat.br
  4. MSBI常见问题总结
  5. c# mysql 链接池溢出_C#MySQL连接池限制,并清理连接
  6. linux未找到make命令,linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)...
  7. c语言随机函数生成字符,c语言随机数生成加减乘除 用C语言编程随机产生一道......
  8. 5款瞬间复活Win7/8/10工具
  9. Microsoft Store打不开解决办法
  10. Markdown格式转换
  11. 深度学习是当前很热门的机器学习算法。在深度学习中,涉及到大量矩阵相乘,
  12. iphone 11显示连接服务器出现错误,iPhone11投屏方法有哪些?iPhone投屏失败的原因及解决方法...
  13. linux-top命令详解
  14. Python与Arduino绘制超声波雷达扫描
  15. 用Python编写的简化版微信客户端
  16. 西安前端开发工程师待遇|哎呦不错呦
  17. 【线性代数】行列式的性质
  18. 一步一步实现一个Web Server-03
  19. 2022年区块链安全领域8成以上损失集中在DeFi和跨链桥
  20. 在springboot遇到的 Access denied for user ‘***‘@‘localhost‘ (using password: YES)问题

热门文章

  1. LeetCode 112. 路径总和 、113. 路径总和 II 思考分析
  2. 2019年的wps计算机考试题,2019年3月计算机一级WPS模拟题及答案(2.21)
  3. java集合转换_java各种集合的转换
  4. php微信获取mediaid超出限制_Python实现每日微信自动打卡
  5. Linux系统编程---4(进程间通信IPC,管道)
  6. 关于cp命令中拷贝所有的写法
  7. 哈夫曼算法证明+哈夫曼编码译码程序实现
  8. HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询
  9. 第一章 TCP/IP协议族
  10. 操作系统(四)文件管理