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 ...
最新文章
- In Gradle projects, always use http://schemas.andr
- apkplug插件托管服务简化与简介-05
- 前端学习笔记(五)-JavaScript语法基本概念
- django 基于 form 验证 确认密码的注册
- 修复删除/var/lib/dpkg目录后,无法使用apt-get命令问题
- Dart编程语言入门
- Visual Studio 2013 详细安装教程(安装+注册)
- 13-union 、distinc、 join
- Class.forName的作用以及为什么要用它【转】
- 学习写第一份在CSDN上的博客;
- Charles添加断点拦截请求 修改request或者修改response
- sht20中写用户寄存器_谁用过sht20这块温湿度传感器,有调通的程序分享下吧
- oj刷题 Problem J: 软件工程
- 基于控制台的老虎机Java Demo
- ctfshow七夕杯2022
- Android wifi 信号强度单位 dbm
- 中国风网站建设设计的2大要素
- Unity遮罩 反向遮罩实现
- 基于BPM的低代码平台如何选型
- IntelliJ Idea 常用快捷键列表
热门文章
- 【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
- 贪心算法---背包问题(物品可以分割问题)
- android 服务端 漏洞,安卓漏洞 CVE 2017-13287 复现详解-
- ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“
- 远控免杀4---Evasion免杀
- DS和[address]
- 关于数据库主键和外键
- uva 10570——Meeting with Aliens
- 数据结构(一)线性表
- 这个回答让我错失offer!offer拿到手软