Android MVP 框架
为什么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 框架相关推荐
- Android MVP框架学习
什么是MVP框架 做Android开发也有好几年时间了,最近接触了Android开发的MVP模式,MVP即Model.View.Presenter的缩写.如果有过一些项目开发经验的人,在项目功能越来越 ...
- Android MVP框架MVPro的使用和源码分析
最近看了两篇关于Android实现MVP的文章一种在android中实现MVP模式的新思路和用MVP架构开发Android应用. 两篇文章的思路都是一样的,即把Activity.Fragment作为P ...
- Android MVP框架实现过程
MVP框架实现过程 目的:View层和Model层分离,中间由Presenter处理逻辑. Prester作为View与Model交互的中间纽带,处理与用户交互的负责逻辑.这里我们只说明View和Pr ...
- android MVP框架
尝试使用MVVM开发模式,让程序解耦. MVVM开发模式图: 优势 模型与视图完全分离,我们可以修改视图而不影响模型: 可以更高效地使用模型,因为所有的交互都发生在一个地方--Presenter内部: ...
- android mvp框架基类,Android MVP架构项目搭建封装,基类封装
综述 对于MVP (Model View Presenter)架构是从著名的MVC(Model View Controller)架构演变而来的.而对于Android应用的开发中本身可视为一种MVC架构 ...
- Android MVP框架搭建
1. 自定义全局配置文件 创建全局自定义配置文件 config.gradle,拆分配置,便于依赖引用管理: 全局 build.gradle 引入自定义配置文件 2. 创建common module, ...
- Android MVP 详解(上)
作者:李旺成 时间:2016年4月3日 "Android MVP 详解(下)"已经发布,欢迎大家提建议. MVP 在 Android 上的使用其实已经有挺长一段时间了,长到似乎有点 ...
- android 最新框架组合,android 官方mvp框架优化:lifecycle-mvp,像前端那样组合式写页面...
目录 1 前言 虽然在标题上,自己很随意的起了这么一个名字.其实并不是说它起个英文名就牛逼了.说白了,它其实就是mvp的思想加了lifecycle-component,然后加入了分层的思想,最后用Ty ...
- Android MVP伴侣,Nucleus框架使用简介
Neclues是一款基于MVP框架的Android Library, 它合理地将程序中的可视化界面和后台线程联系起来. 如果你还不了解MVP框架,请点击查看详情 框架介绍 我们在应用中使用MVP和Rx ...
最新文章
- 【MIT港科大】最新《贝叶斯深度学习》2020综述论文,35页pdf全面阐述最新进展...
- Pacemaker+Corosync PostgreSQL流复制HA的部署(pha4pgsql)
- system文件_解压MIUI 10 升级包 system.new.dat.br
- MSBI常见问题总结
- c# mysql 链接池溢出_C#MySQL连接池限制,并清理连接
- linux未找到make命令,linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)...
- c语言随机函数生成字符,c语言随机数生成加减乘除 用C语言编程随机产生一道......
- 5款瞬间复活Win7/8/10工具
- Microsoft Store打不开解决办法
- Markdown格式转换
- 深度学习是当前很热门的机器学习算法。在深度学习中,涉及到大量矩阵相乘,
- iphone 11显示连接服务器出现错误,iPhone11投屏方法有哪些?iPhone投屏失败的原因及解决方法...
- linux-top命令详解
- Python与Arduino绘制超声波雷达扫描
- 用Python编写的简化版微信客户端
- 西安前端开发工程师待遇|哎呦不错呦
- 【线性代数】行列式的性质
- 一步一步实现一个Web Server-03
- 2022年区块链安全领域8成以上损失集中在DeFi和跨链桥
- 在springboot遇到的 Access denied for user ‘***‘@‘localhost‘ (using password: YES)问题
热门文章
- LeetCode 112. 路径总和 、113. 路径总和 II 思考分析
- 2019年的wps计算机考试题,2019年3月计算机一级WPS模拟题及答案(2.21)
- java集合转换_java各种集合的转换
- php微信获取mediaid超出限制_Python实现每日微信自动打卡
- Linux系统编程---4(进程间通信IPC,管道)
- 关于cp命令中拷贝所有的写法
- 哈夫曼算法证明+哈夫曼编码译码程序实现
- HDU - 4578Transformation——线段树+区间加法修改+区间乘法修改+区间置数+区间和查询+区间平方和查询+区间立方和查询
- 第一章 TCP/IP协议族
- 操作系统(四)文件管理