Kotlin安卓实战之Retrofit + OkHttp

简介

目前该框架的使用已经很广泛了,那么在kotlin中具体是怎么实现的呢,下面介绍下对其的封装,代码Github地址

项目依赖

implementation 'com.squareup.okhttp3:okhttp:3.8.1'

implementation 'com.squareup.okhttp3:logging-interceptor:3.8.1'

// retrofit

implementation 'com.squareup.retrofit2:retrofit:2.3.0'

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

//gson

implementation 'com.google.code.gson:gson:2.8.1'

implementation 是android studio 3.0 里 依赖 的gradle 版本语法。相当于之前的 compile

ServiceFactory代码

用object 声明单例类 ServiceFactory, getLogInterceptor函数获取Http 日志拦截器,serviceActivity 通过懒加载机制 在被第一次使用的时候初始化,通过createRetrofitService函数创建并赋值。

ServiceActivity 代码

通过依赖注入的方式实现接口的声明,@POST声明post接口,@Body 为请求体。写法与java基本一致

封装

ActivitySource代码

这里可以看到封装的较为复杂,它实现了 在java中的 CallBack 回掉,和相当于该方法的递归实现。详细解释下:

三个参数:

1.  paramActivityList 这个就是个普通类,跟java没什么区别

2.  success 这是个方法参数,方法参数还包含了两个参数,一个是正常接口返回ResultActivityList,二个是Retry方法参数是用来重复调用该方法的,这里是为了在页面给用户弹出重试按钮的时候,重新请求该接口的实现。

3. fail 这个参数实现的原理同上

封装

调用

下面这个图: 我不知道我要表达的意思 你看明白没,就是在getActivityList 实现 retry函数,在别处调用的时候 可以 主动调用 retry函数 来实现 该函数的 一次递归。

封装

总结

你也看到,在kotlin语言中 对于callBack的返回 完全不用定义接口,而且还可以实现更复杂的一次递归操作,这完全由于kotlin语言的特性才能实现,如果在java中实现同样的功能 真不知道要写多少代码,对吧,不信,你去试试。本次就学到这,下期再见。