Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

对项目的基本介绍

  • 1.整个框架主要是给MVVM框架使用的 , 自己写完interface接口后 , 通过自定义的注解就能自动生成接口方法
  • 2.用Kotlin的Flow去代替RxJAVA , 因为我发现RxJava功能很强大 , 但是大家都只是在Http层面使用了一下 , 既然要用Kotlin里面就已经有Flow , 那我还不如少添加一个库
  • 3.通过jetpack的Room数据库实现网络请求的存储 , 缓存策略也用过注解去完成 。
  • 4.发起的网络请求是与宿主生命周期绑定的 , 在网络请求回来之前 , 宿主已经销毁的话 , 网络请求也会中断的
基本使用方法1.先定义接口类和Retrofit一样 , 需要定义一个接口类
其中@AutoApi , @AutoFlowApi , @NetStrategy是自定义的注解 , 后面会介绍到 。
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
2.要先编译 , 会在你的接口类的文件夹下生成一个xxxRepository.class这是通过注解自动生成的文件 , 使用了kotlinpoet 并且这里apiService就是通过Retrofit拿到的接口代理
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
3.在viewmodel拿到对应Repository类的方法
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
4.在对应地方通过viewmodel调用调用接口 , 传入对应参数
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
在合适的地方观察
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
Retrofit的封装上面说到在Repository类的apiService就是通过Retrofit拿到的接口代理类 。所以先进去看看apiService好了
可以看到apiService是BaseRepository的变量 而我们生成的Repository都是继承BaseRepository的
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
当我们调ConfigRepository类中的方法时候 , 就会将ConfigRepository传入findNeedType
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
而findNeedType方法就会将ConfigRepository对应的ConfigService得到并且返回出去
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
所以apiService就相当于这样 , 好像有点Retrofit的create方法的样子了
var apiService: T = HttpProvider.defaultCreate(ConfigService) as Class<out T>)我们继续进入
HttpProvider.defaultCreate
可以看到newRetrofit(),并且传入了一个HttpConfig,看到这个名字就知道这是Http的配置 接着是newCreate() , 接收了我们的接口service类
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
首先看看newRetrofit方法这几行代码就是创建了一个Retrofit对象并且保存起来 , 最后返回出去 。但是他是怎么和HttpConfig联系起来的呢?
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
我们可以看到这里将生成的Retrofit.Builder()传给了HttpConfig的方法build里 , 我们进去看一看
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
可以看到这里就是我们再熟悉不过的Retrofit的配置环节
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
所以通过newRetrofit方法 , 我们就将Retrofit对象配置好并且拿到Retrofit对象 , 还保存起来方便下次复用
在看看newCreate()方法这是个扩展函数 , 是Retrofit的扩展函数 将传入的ConfigService通过Retrofit.create()生成代理类 , 并且保存起来复用
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 
注解的介绍1.AutoApi我们从最简单的AutoApi做引子 , 开始介绍整个注解框架
只要你的接口类方法中使用了这个注解 , 就会生成suspend方法 , 非常的简单 接着我们来看看他是怎么实现的
Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 

Android开发:使用Kotlin+协程+自定义注解+Retrofit的网络框架

文章插图
 


推荐阅读