为什么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. In Gradle projects, always use http://schemas.andr
  2. apkplug插件托管服务简化与简介-05
  3. 前端学习笔记(五)-JavaScript语法基本概念
  4. django 基于 form 验证 确认密码的注册
  5. 修复删除/var/lib/dpkg目录后,无法使用apt-get命令问题
  6. Dart编程语言入门
  7. Visual Studio 2013 详细安装教程(安装+注册)
  8. 13-union 、distinc、 join
  9. Class.forName的作用以及为什么要用它【转】
  10. 学习写第一份在CSDN上的博客;
  11. Charles添加断点拦截请求 修改request或者修改response
  12. sht20中写用户寄存器_谁用过sht20这块温湿度传感器,有调通的程序分享下吧
  13. oj刷题 Problem J: 软件工程
  14. 基于控制台的老虎机Java Demo
  15. ctfshow七夕杯2022
  16. Android wifi 信号强度单位 dbm
  17. 中国风网站建设设计的2大要素
  18. Unity遮罩 反向遮罩实现
  19. 基于BPM的低代码平台如何选型
  20. IntelliJ Idea 常用快捷键列表

热门文章

  1. 【C++ grammar】nullptr and Dynamic Memory Allocation (空指针和动态内存分配)
  2. 贪心算法---背包问题(物品可以分割问题)
  3. android 服务端 漏洞,安卓漏洞 CVE 2017-13287 复现详解-
  4. ffplay SDL_OpenAudio (2 channels, 44100 Hz): WASAPI can‘t initialize audio client“
  5. 远控免杀4---Evasion免杀
  6. DS和[address]
  7. 关于数据库主键和外键
  8. uva 10570——Meeting with Aliens
  9. 数据结构(一)线性表
  10. 这个回答让我错失offer!offer拿到手软