Android开源项目 MVP+MD+Retrofit+RxJava 看了你会上瘾的

2023-12-21 05:08

本文主要是介绍Android开源项目 MVP+MD+Retrofit+RxJava 看了你会上瘾的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android开源项目 MVP+MD+Retrofit+RxJava 看了你会上瘾的

前言:去年这个时候独立开发上架了一款APP(应用宝:叙恋),用到的技术都是比较老旧。今年趁着回学校写论文的时间,会陆续将这款APP更改成目前最火热的MVP+MD+Retrofit+RxJava结构。要是你还没学会怎样使用它,怕是要out了。

本文只分析源码、实战,请自行百度相关基础知识。猛戳致敬原创
我所理解的RxJava——上手其实很简单(一)
android 介绍Retrofit的简单使用
RxJava+Retrofit+OkHttp深入浅出-终极封装

先上图,欢迎下载(应用宝:叙恋)
这里写图片描述

这里写图片描述
源码具备的看点
- Google Material Design 风格
- MVP设计模式
- butterknife注解框架
- RxJava+Retrofit网络请求封装
- 编码格式符合Google官方开发规范
- 源码陆续更新,了解更多功能请下载(应用宝:叙恋)


MVP模式

MVP:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
官方图
用自己的话来说就说,Model干数据相关的事,View干显示数据的事,两者互不直接联系,Presenter将两者联系起来。
好处:
1、模型与视图完全分离,我们可以修改视图而不影响模型
2、可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部
3、我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁。
4、如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)

项目结构一目了然
这里写图片描述
看项目结构,好像分类的确细了点,不要觉得麻烦。整个项目可读性、维护性大大增强。

M:model
这里写图片描述
显示文章列表需要先下载文章有关的数据,在接口中定义一个方法,传入请求所需参数page,size是用来分页功能。
这里写图片描述
用来实现接口,完成里面的lodeArticles(),以及定义加载回调接口。

V:view
这里写图片描述
view其实就是activity,定义activity显示数据所需要的方法

P:presenter
这里写图片描述
P中的LodeArticles()是用来将M与V中的相关方法联系起来。看下图具体实现
这里写图片描述
创建View、Model实例,将互不相干的两者联系起来

Activity中调用
这里写图片描述
这里写图片描述
调用也不难,实现View接口中的方法,创建Presenter实例,调用其中的方法。
这样主页显示文章列表的功能,就是按照MVP模式设计的。你会发现拓展起来十分简单,修改Model不会直接去影响View,修改View也不影响Model。所以我说用多了你就会上瘾了。

RxJava+Retrofit封装的网络请求

这个框架到底有多好,我就不解释了,还是那句话:用了会上瘾。
首先加入依赖 注意依赖retrofit2版本要一致
/*rx-android-java*/
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.trello:rxlifecycle:1.0'
compile 'com.trello:rxlifecycle-components:1.0'
/*rotrofit*/
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

这里我们先来看看不封装的样子
这里写图片描述

封装后
这里写图片描述

封装步骤

封装这个网络请求框架,我也是看了网上很多开源的项目帖子,总结出自己的一套极简请求框架。我只是给大家提个思路,大家可以根据自己的项目逻辑来封装。肯定我这个不是最好、最适用你们的。

这里写图片描述
首先写一个数据base类,这里面有RxAppCompatActivity Rx生命周期、HttpOnNextListener 请求回调监听、是否显示加载框、是否取消加载、请求超时时间、还有一个抽象方法。

这里写图片描述
ArticleApi是实现类。在构造方法中可以配置请求的参数(是否显示加载框、超时时间等 不修改则为base类中的默认参数),这个类同时返回一个Observable对象。

这里写图片描述
请求回调方法,onNext()是必须实现的,是成功后返回数据的方法。onError()是请求失败,onCancel()是取消请求。

这里写图片描述

这里写图片描述
这里写图片描述
ProgressSubscriber类是对Subscriber对象的封装,主要有加载框的初始化、显示隐藏,还有Subscriber中回调方法onNext()的重写;

单例的HttpManager是用来处理http请求的。主要看doHttpDeal()中的代码

这里写图片描述
这里面就是配置Retrofit对象,以及将我们封装好的Observable和Subscriber对象用 observable.subscribe(subscriber); 订阅联系起来。

纸上得来终觉浅,对照着源码看才会有收获。
项目源码下载(陆续更新,欢迎star)
https://github.com/KomoriWu/RxJava-Retrofit-MVP-MD

这篇关于Android开源项目 MVP+MD+Retrofit+RxJava 看了你会上瘾的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/518730

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input