README.md

May 19, 2026 · View on GitHub

摘要

Gradle

// DevRetrofit - Retrofit + Kotlin Coroutines 封装
implementation 'io.github.afkt:DevRetrofit:1.1.0'

框架功能介绍

DevRetrofit 基于 Retrofit + Kotlin Coroutines 进行封装的网络层封装库, 针对 CoroutineScopeViewModelLifecycleLifecycleOwnerLifecycleOwner 实现类 ( ActivityFragment 等 ) 封装快捷扩展函数。

并对上述封装的请求方法扩展函数支持传入 方法体CallbackResultCallback

推荐在该基础上进行二次封装,并搭配 DevHttpCaptureDevHttpManager 使用。

示例项目

直接运行、查看使用示例项目代码!!!

DevRetrofitUse!!! DevRetrofitUse!!! DevRetrofitUse!!!

项目类结构 - 包目录

  • 数据模型类 model.kt:DevRetrofit Base 数据模型、接口汇总类

  • 封装请求方法 request.kt:整个 DevRetrofit 库最终实现,统一调用该请求封装方法

  • 请求方法协程扩展函数 request_coroutines.kt:在 request.kt 基础上封装使用协程

  • Callback 扩展函数 request_coroutines_simple.kt:在 request_coroutines.kt 基础上减少 start、success、error、finish 方法体传参,使用 Callback、ResultCallback

API 文档

  • Base.Response 请求响应解析类 ( 接口 ) -> Base.Response
方法注释
getData获取响应数据
getCode获取响应 Code
getMessage获取提示 Message
isSuccess判断请求是否成功
isSuccessWithData判断请求是否成功并且 Data 不为 null
hasData判断 Data 是否不为 null
requireData获取不为 null 的 Data
方法注释
CoroutineScope.scopeExecuteRequest无任何额外逻辑封装, 支持自定义解析、处理等代码
CoroutineScope.scopeExecuteResponseRequest封装为 Base.Response、Base.Result 进行响应
launchExecuteRequestViewModel、Lifecycle、LifecycleOwner 扩展函数 ( 功能如上 )
launchExecuteResponseRequestViewModel、Lifecycle、LifecycleOwner 扩展函数 ( 功能如上 )
方法注释
CoroutineScope.simpleScopeExecuteRequest无任何额外逻辑封装, 支持自定义解析、处理等代码
CoroutineScope.simpleScopeExecuteResponseRequest封装为 Base.Response、Base.Result 进行响应
simpleLaunchExecuteRequestViewModel、Lifecycle、LifecycleOwner 扩展函数 ( 功能如上 )
simpleLaunchExecuteResponseRequestViewModel、Lifecycle、LifecycleOwner 扩展函数 ( 功能如上 )

使用步骤

1. 首先创建 Response 请求响应解析类 ( 非必须 )

需要创建 Response 类并实现 Base.Response 解析类

主要是为了解决一个问题:新旧 API 变更、使用第三方接口、SDK 等返回结构不一致时,可自定义解析类进行解析处理

假设 A 项目新接口,后台返回响应数据结构为

{
    "resultCode" : 200,
    "message" : "success",
    "result" : Object
}

A 项目旧接口,后台返回响应数据结构为

{
    "responseCode" : 0,
    "responseMessage" : "获取成功",
    "response" : Object
}

第三方 SDK 接口,后台返回响应数据结构为

{
    "code": "200",
    "message": "查询成功",
    "response" : Object
}

等等诸如此类差异化字段命名、字段类型,创建 Response 解析类即可解决

/**
 * detail: App 统一响应模型
 * @author Ttt
 * 解决不同请求响应字段不一致情况
 */
open class AppResponse<T> : Base.Response<T> {

    // ===========================
    // = error.json、photos.json =
    // ===========================

    private var code: String? = null
    private var message: String? = null
    private var data: T? = null

    // ==============
    // = books.json =
    // ==============

    private var resultCode: Int? = null
    private var result: T? = null

    // =====================
    // = movie_detail.json =
    // =====================

    private var responseCode: Int? = null
    private var responseMessage: String? = null
    private var response: T? = null

    // =====================
    // = Base.Response 实现 =
    // =====================

    override fun getData(): T? {
        if (data != null) return data
        if (result != null) return result
        if (response != null) return response
        return null
    }

    override fun getCode(): String? {
        if (code != null) return code
        if (resultCode != null) return resultCode.toString()
        if (responseCode != null) return responseCode.toString()
        return null
    }

    override fun getMessage(): String? {
        if (message != null) return message
        if (responseMessage != null) return responseMessage
        return null
    }

    override fun isSuccess(): Boolean {
//        // 方式一
//        val _code = getCode().orEmpty()
//        return when (_code) {
//            "200", "0" -> true
//            else -> false
//        }
        // 方式二
        if (code == "200") return true
        if (resultCode == 200) return true
        if (responseCode == 0) return true
        return false
    }
}

2. 创建 Callback 每个阶段通知回调类 ( 非必须 )

创建 Base Callback 是为了整个项目统一使用,内部可添加额外逻辑处理特殊字段存储等,视项目情况定义,参考如下:

// 封装 Base Notify.Callback
abstract class BaseCallback<T> : Notify.Callback<T>()

// 封装 Base Notify.ResultCallback 简化代码
abstract class BaseResultCallback<T> : Notify.ResultCallback<T, BaseResponse<T>>()

3. 发起请求 ( 最后一步 )

// 具体查看【示例项目】
fun fetchData(
    viewModel: ViewModel,
    startBlock: () -> Unit = {},
    finishBlock: () -> Unit = {},
    errorBlock: (Throwable) -> Unit = {},
    successBlock: (Bean) -> Unit
) {
    viewModel.launchExecuteRequest(block = {
        RetrofitAPI.api().getData()
    }, start = {
        startBlock.invoke()
    }, success = { result ->
        successBlock.invoke(result)
    }, error = {
        errorBlock.invoke(it)
    }, finish = {
        finishBlock.invoke()
    })
}