Retrofit 多 BaseUrl 管理功能使用

April 30, 2026 · View on GitHub

摘要

Gradle

// DevHttpManager - OkHttp 管理库 ( Retrofit 多 BaseUrl 管理、Progress 监听 )
implementation 'io.github.afkt:DevHttpManager:1.1.0'

目录结构

- dev                   | 根目录
   - http               | 基于 OkHttp 管理实现代码
      - manager         | Retrofit 多 BaseUrl 管理
      - progress        | OkHttp 上传、下载进度监听
         - operation    | 监听通知不同方式实现

框架功能介绍

  • 支持 Retrofit 多 BaseUrl 管理及操作方法封装

  • 支持 Retrofit BaseUrl Reset 事件全局监听、各个模块单独监听回调

  • 支持全局 OkHttp Builder 创建方法,可进行全局管理

  • 针对多 Retrofit 管理封装 Operation 对象并支持组件化使用

  • 支持传参 Map 对多个 Retrofit 同时进行 BaseUrl Reset

  • 支持对 App 所有链接上传、下载进度监听

  • 基于 OkHttp 原生 Api 实现,不存在兼容问题

  • 侵入性低,使用本框架不需要更改历史上传、下载实现代码

  • 对外公开封装 Progress RequestBody、ResponseBody 类,支持自定义使用

  • 支持监听代码,不同实现方式切换,内部内存回收、监听通知方式不同

  • 针对多组件模块化封装,内置默认全局通用对象,也可传 Key 创建独立 Progress 管理操作对象

示例项目

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

DevHttpManagerUse!!! DevHttpManagerUse!!! DevHttpManagerUse!!!

API 文档

方法注释
getDevHttpManagerVersionCode获取 DevHttpManager 版本号
getDevHttpManagerVersion获取 DevHttpManager 版本
getDevAppVersionCode获取 DevApp 版本号
getDevAppVersion获取 DevApp 版本
RMRetrofitManager 方法
PMProgressManager 方法
方法注释
getOkHttpBuilder获取全局 OkHttp Builder 接口对象
setOkHttpBuilder设置全局 OkHttp Builder 接口对象
removeOkHttpBuilder移除全局 OkHttp Builder 接口对象
getRetrofitResetListener获取全局 Retrofit 重新构建监听事件
setRetrofitResetListener设置全局 Retrofit 重新构建监听事件
removeRetrofitResetListener移除全局 Retrofit 重新构建监听事件
getOperation获取 Retrofit Operation 操作对象
containsOperation通过 Key 判断是否存在 Retrofit Operation 操作对象
putRetrofitBuilder通过 Key 绑定存储 RetrofitBuilder 并返回 Operation 操作对象
removeRetrofitBuilder通过 Key 解绑移除 RetrofitBuilder 并返回 Operation 操作对象
reset重置处理 ( 重新构建 Retrofit )
resetAll重置处理 ( 重新构建全部 Retrofit )
方法注释
getDefault获取全局默认 Progress Operation 操作对象
getOperation获取 Progress Operation 操作对象
containsOperation通过 Key 判断是否存在 Progress Operation 操作对象
removeOperation通过 Key 解绑并返回 Operation 操作对象
clearOperation清空所有 Progress Operation 操作对象
putBidirectionalProgressOperation通过 Key 绑定并返回 Operation 操作对象 ( 监听上下行 )
putRequestProgressOperation通过 Key 绑定并返回 Operation 操作对象 ( 监听上行 )
putResponseProgressOperation通过 Key 绑定并返回 Operation 操作对象 ( 监听下行 )

Retrofit 多 BaseUrl 管理功能使用

具体实现代码 目录

使用代码只有一步:通过 Key 绑定存储 RetrofitBuilder 并返回 Operation 操作对象

// 通过 Key 绑定存储 RetrofitBuilder 并返回 Operation 操作对象
DevHttpManager.RM.putRetrofitBuilder(
    moduleKey, RetrofitBuilder
)

通过返回的 RetrofitOperation 对象进行获取 Retrofit 或直接 create APIService

/**
 * 获取 Retrofit 对象
 * @param check 是否需要判断 Retrofit 是否为 null
 * @return Retrofit
 */
fun getRetrofit(check: Boolean = true): Retrofit?

/**
 * 通过 Retrofit 代理创建 Service
 * @param service Class<T>
 * @return Service Class
 */
fun <T> create(service: Class<T>): T?

/**
 * 重置处理 ( 重新构建 Retrofit )
 * @param httpUrl 构建使用指定 baseUrl
 * @return Retrofit Operation
 */
fun reset(httpUrl: HttpUrl? = null): RetrofitOperation

/**
 * 重置处理 ( 重新构建 Retrofit ) 并代理创建 Service
 * @param httpUrl 构建使用指定 baseUrl
 * @return Retrofit Operation
 */
fun <T> resetAndCreate(
    service: Class<T>,
    httpUrl: HttpUrl? = null
): T?

完整使用查看示例项目 DevHttpManagerUse - MediaAPI

OkHttp 上传、下载进度监听使用

具体实现代码 目录

使用代码只有一步:通过 Key 绑定并返回 Operation 操作对象

// 通过 Key 绑定并返回 Operation 操作对象 ( 监听上下行 )
DevHttpManager.PM.putBidirectionalProgressOperation(moduleKey)
// 通过 Key 绑定并返回 Operation 操作对象 ( 监听上行 )
DevHttpManager.PM.putRequestProgressOperation(moduleKey)
// 通过 Key 绑定并返回 Operation 操作对象 ( 监听下行 )
DevHttpManager.PM.putResponseProgressOperation(moduleKey)
// 或者使用全局默认 Progress Operation 操作对象
DevHttpManager.PM.getDefault()
  • 监听指定 url 进度,也是只用一句代码
// 通过返回的 Operation 对象进行操作
val mOperation = DevHttpManager.PM.getDefault()
// 添加指定 url 上行监听事件
mOperation.addRequestListener(url, progressCallback)
// 添加指定 url 下行监听事件
mOperation.addResponseListener(url, progressCallback)

通过返回的 ProgressOperation 对象进行操作,具体公开方法可以查看 IOperation 接口

完整使用查看示例项目 DevHttpManagerUse - 上传、下载进度监听使用

/**
 * 需要切换内部实现方式, 必须先调用该方法
 * 实现方式差异可以查看 ProgressOperation 类注释
 * 可不调用默认使用 PLAN_A
 */
mOperation.setPlanType(ProgressOperation.PLAN_A)
mOperation.setPlanType(ProgressOperation.PLAN_B)

// 进行拦截器包装 ( 必须调用 )
val okHttpClient = mOperation.wrap(OkHttpClient.Builder()).build()

// 基于 OkHttp 库, 不同库封装使用不同, 只要使用 wrap build 后的 client 就能够实现监听
val retrofit = Retrofit.Builder()
    // Gson 解析
    .addConverterFactory(GsonConverterFactory.create())
    // OkHttpClient
    .client(okHttpClient)
    // 服务器地址
    .baseUrl("")
    .build()


// 添加指定 url 上行监听事件
mOperation.addRequestListener(url, progressCallback)
// 添加指定 url 下行监听事件
mOperation.addResponseListener(url, progressCallback)