{"id":18565061,"url":"https://github.com/jenly1314/retrofithelper","last_synced_at":"2026-03-08T13:32:42.306Z","repository":{"id":57720448,"uuid":"268069430","full_name":"jenly1314/RetrofitHelper","owner":"jenly1314","description":"💪 RetrofitHelper是一个支持配置多个BaseUrl，支持动态改变BaseUrl，动态配置超时时长的Retrofit帮助类","archived":false,"fork":false,"pushed_at":"2024-11-12T10:28:42.000Z","size":8195,"stargazers_count":33,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-24T16:11:15.129Z","etag":null,"topics":["android","baseurl","baseurl-domain","domainurl","dynamic-domain","dynamic-timeout","dynamic-url","mulit-base-url","okhttp","retrofit","retrofit-helper","retrofit-manager","retrofit2","timeout","url-manager"],"latest_commit_sha":null,"homepage":"https://jenly1314.github.io/RetrofitHelper/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jenly1314.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-30T11:50:40.000Z","updated_at":"2025-01-24T10:05:44.000Z","dependencies_parsed_at":"2024-06-21T00:03:40.905Z","dependency_job_id":"3e31cab7-3c2b-40d5-b07c-087e858901a8","html_url":"https://github.com/jenly1314/RetrofitHelper","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FRetrofitHelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FRetrofitHelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FRetrofitHelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jenly1314%2FRetrofitHelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jenly1314","download_url":"https://codeload.github.com/jenly1314/RetrofitHelper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248157558,"owners_count":21057035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","baseurl","baseurl-domain","domainurl","dynamic-domain","dynamic-timeout","dynamic-url","mulit-base-url","okhttp","retrofit","retrofit-helper","retrofit-manager","retrofit2","timeout","url-manager"],"created_at":"2024-11-06T22:17:34.208Z","updated_at":"2026-03-08T13:32:42.300Z","avatar_url":"https://github.com/jenly1314.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RetrofitHelper\n\n![Image](app/src/main/ic_launcher-playstore.png)\n\n[![MavenCentral](https://img.shields.io/maven-central/v/com.github.jenly1314/retrofit-helper?logo=sonatype)](https://repo1.maven.org/maven2/com/github/jenly1314/RetrofitHelper)\n[![JitPack](https://img.shields.io/jitpack/v/github/jenly1314/RetrofitHelper?logo=jitpack)](https://jitpack.io/#jenly1314/RetrofitHelper)\n[![CI](https://img.shields.io/github/actions/workflow/status/jenly1314/RetrofitHelper/build.yml?logo=github)](https://github.com/jenly1314/RetrofitHelper/actions/workflows/build.yml)\n[![Download](https://img.shields.io/badge/download-APK-brightgreen?logo=github)](https://raw.githubusercontent.com/jenly1314/RetrofitHelper/master/app/release/app-release.apk)\n[![API](https://img.shields.io/badge/API-16%2B-brightgreen?logo=android)](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)\n[![License](https://img.shields.io/github/license/jenly1314/RetrofitHelper?logo=open-source-initiative)](https://opensource.org/licenses/mit)\n\n\nRetrofitHelper for Android 是一个为 Retrofit 提供便捷配置多个BaseUrl相关的扩展帮助类。\n\n## 主要功能介绍\n- ✅ 支持配置多个BaseUrl\n- ✅ 支持动态改变BaseUrl\n- ✅ 支持动态配置超时时长\n- ✅ 支持添加公共请求头\n- ✅ 支持请求响应进度监听\n\n## 效果展示\n![Image](GIF.gif)\n\n\u003e 你也可以直接下载 [演示App](https://raw.githubusercontent.com/jenly1314/RetrofitHelper/master/app/release/app-release.apk) 体验效果\n\n## 引入\n\n### Gradle:\n\n1. 在Project的 **build.gradle** 或 **setting.gradle** 中添加远程仓库\n\n    ```gradle\n    repositories {\n        //...\n        mavenCentral()\n    }\n    ```\n\n2. 在Module的 **build.gradle** 中添加依赖项\n\n    ```gradle\n    // AndroidX 版本\n    implementation 'com.github.jenly1314:retrofit-helper:1.1.0'\n    ```\n\n\u003e 因为 **RetrofitHelper** 依赖的 **retrofit** 只在编译时有效，所以在使用时，您的项目还需依赖 **retrofit** 才能正常使用。\n\n## 使用\n\n### 示例\n\n#### 主要集成步骤代码示例\n\nStep.1 需使用JDK8编译，在你项目中的build.gradle的android{}中添加配置：\n```gradle\ncompileOptions {\n    targetCompatibility JavaVersion.VERSION_1_8\n    sourceCompatibility JavaVersion.VERSION_1_8\n}\n\n```\n\nStep.2 通过RetrofitHelper初始化OkHttpClient，进行初始化配置\n```kotlin\n// 通过RetrofitHelper创建一个支持多个BaseUrl的 OkHttpClient\n// 方式一\nval clientBuilder = RetrofitHelper.getInstance()\n            .createClientBuilder()\n            //...你自己的其他配置\n            \n// 方式二\nval okHttpClient = RetrofitHelper.getInstance()\n            .with(clientBuilder)\n            //...你自己的其他配置\n            .build()\n\n```\n\n```kotlin\n// 完整示例\nval okHttpClient = RetrofitHelper.getInstance()\n            .createClientBuilder()\n            .addInterceptor(LogInterceptor())\n            .build()\nval retrofit = Retrofit.Builder()\n            .baseUrl(Constants.BASE_URL)\n            .client(okHttpClient)\n            .addConverterFactory(GsonConverterFactory.create(Gson())) \n            .build()\n```\n\nStep.3 定义接口时，通过注解标记对应接口，支持动态改变 BaseUrl相关功能\n```kotlin\n interface ApiService {\n    \n     /**\n      * 接口示例，没添加任何标识，和常规使用一致\n      * @return\n      */\n     @GET(\"api/user\")\n     fun getUser(): Call\u003cUser\u003e\n     \n     /**\n      * Retrofit默认返回接口定义示例，添加 DomainName 标示 和 Timeout 标示\n      * @return\n      */\n     @DomainName(domainName) // domainName 域名别名标识，用于支持切换对应的 BaseUrl\n     @Timeout(connectTimeout = 15,readTimeout = 15,writeTimeout = 15,timeUnit = TimeUnit.SECONDS) //超时标识，用于自定义超时时长\n     @GET(\"api/user\")\n     fun getUser(): Call\u003cUser\u003e\n\n     /**\n      * 动态改变 BaseUrl\n      * @return\n      */\n     @BaseUrl(baseUrl) // baseUrl 标识，用于支持指定 BaseUrl\n     @GET(\"api/user\")\n     fun getUser(): Call\u003cUser\u003e\n     \n     //--------------------------------------\n\n     /**\n      * 使用 RxJava 返回接口定义示例，添加 DomainName 标示 和 Timeout 标示\n      * @return\n      */\n     @DomainName(domainName) // domainName 域名别名标识，用于支持切换对应的 BaseUrl\n     @Timeout(connectTimeout = 20,readTimeout = 10) // 超时标识，用于自定义超时时长\n     @GET(\"api/user\")\n     fun getUser(): Observable\u003cUser\u003e\n\n    /**\n     * 下载；可通过 RetrofitHelper.getInstance().addResponseListener(key, listener) 监听下载进度\n     */\n    @ResponseProgress(key) // 支持响应进度监听，自定义配置监听的key\n    @Streaming\n    @GET(\"api/download\")\n    fun download(): Call\u003cResponseBody\u003e\n }\n\n```\n\nStep.4 添加多个 BaseUrl 支持\n```kotlin\n        // 添加多个 BaseUrl 支持 ，domainName为域名别名标识，domainUrl为域名对应的 BaseUrl，与上面的接口定义表示一致即可生效\n        RetrofitHelper.getInstance().putDomain(domainName,domainUrl)\n```\n```kotlin\n        // 添加多个 BaseUrl 支持 示例\n        RetrofitHelper.getInstance().apply {\n            //GitHub baseUrl\n            putDomain(Constants.DOMAIN_GITHUB,Constants.GITHUB_BASE_URL)\n            //Google baseUrl\n            putDomain(Constants.DOMAIN_GOOGLE,Constants.GOOGLE_BASE_URL)\n        }\n```\n\nStep.5 添加进度监听\n\n```kotlin\n        // 添加请求进度监听：key默认为请求的url，也可以通过 {@link RequestProgress} 来自定义配置接口对应的key；自定义配置的key优先级高于默认的url\n        RetrofitHelper.getInstance().addRequestListener(key, object: ProgressListener{\n            override fun onProgress(currentBytes: Long, contentLength: Long, completed: Boolean) {\n                \n            }\n\n            override fun onException(e: Exception) {\n                \n            }\n        })\n```\n\n```kotlin\n        // 添加响应进度监听：key默认为请求的url，也可以通过 {@link ResponseProgress} 来自定义配置接口对应的key；自定义配置的key优先级高于默认的url\n        RetrofitHelper.getInstance().addResponseListener(key, object: ProgressListener{\n            override fun onProgress(currentBytes: Long, contentLength: Long, completed: Boolean) {\n                \n            }\n\n            override fun onException(e: Exception) {\n                \n            }\n        })\n```\n\n#### RetrofitHelper 说明\n```java\n/**\n * Retrofit帮助类\n * \n * 主要功能介绍：\n *      1.支持管理多个 BaseUrl，且支持运行时动态改变\n *      2.支持接口自定义超时时长，满足每个接口动态定义超时时长\n *      3.支持添加公共请求头\n *\n * RetrofitHelper中的核心方法\n *\n * {@link #createClientBuilder()} 创建 {@link OkHttpClient.Builder}初始化一些配置参数，用于支持多个 BaseUrl\n *\n * {@link #with(OkHttpClient.Builder)} 传入 {@link OkHttpClient.Builder} 配置一些参数，用于支持多个 BaseUrl\n *\n * {@link #setBaseUrl(String)} 和 {@link #setBaseUrl(HttpUrl)} 主要用于设置默认的 BaseUrl。\n *\n * {@link #putDomain(String, String)} 和 {@link #putDomain(String, HttpUrl)} 主要用于支持多个 BaseUrl，且支持 BaseUrl 动态改变。\n *\n * {@link #setDynamicDomain(boolean)} 设置是否支持 配置多个BaseUrl，且支持动态改变，一般会通过其他途径自动开启，此方法一般不会主动用到，只有在特殊场景下可能会有此需求，所以提供此方法主要用于提供更多种可能。\n *\n * {@link #setHttpUrlParser(HttpUrlParser)} 设置 HttpUrl解析器 , 当前默认采用的 {@link DomainParser} 实现类，你也可以自定义实现 {@link HttpUrlParser}\n *\n * {@link #setAddHeader(boolean)} 设置是否添加头，一般会通过{@link #addHeader(String, String)}相关方法自动开启，此方法一般不会主动用到，只有特殊场景下会有此需求，主要用于提供统一控制。\n *\n * {@link #addHeader(String, String)} 设置头，主要用于添加公共头消息。\n *\n * {@link #addHeaders(Map)} 设置头，主要用于设置公共头消息。\n * \n * {@link #addRequestListener(String, ProgressListener)} 添加请求监听。\n * \n * {@link #addResponseListener(String, ProgressListener)} 添加响应监听。\n * \n * 这里只是列出一些对外使用的核心方法，和相关的简单说明。如果想了解更多，可以查看对应的方法和详情。\n *\n * @author \u003ca href=\"mailto:jenly1314@gmail.com\"\u003eJenly\u003c/a\u003e\n */\npublic final class RetrofitHelper{\n    //...\n}\n\n```\n\n#### 特别说明\n```kotlin\n//通过setBaseUrl可以动态改变全局的 BaseUrl，优先级比putDomain(domainName,domainUrl)低，谨慎使用\nRetrofitHelper.getInstance().setBaseUrl(dynamicUrl)\n```\n\n更多使用详情，请查看[app](app)中的源码使用示例或直接查看[API帮助文档](https://jenly1314.github.io/RetrofitHelper/api/)\n\n## 相关推荐\n\n- [BaseUrlManager](https://github.com/jenly1314/BaseUrlManager) BaseUrl管理器，主要打测试包时，一个App可动态切换到不同的开发环境或测试环境。\n- [MVVMFrame](https://github.com/jenly1314/MVVMFrame) 一个基于Google官方推出的JetPack构建的MVVM快速开发框架。\n- [AppUpdater](https://github.com/jenly1314/AppUpdater) 一个专注于App更新，一键傻瓜式集成App版本升级的轻量开源库。\n- [ImageViewer](http://github.com/AndroidKTX/ImageViewer) 一个图片查看器，一般用来查看图片详情或查看大图时使用。\n- [LogX](http://github.com/jenly1314/LogX) 一个轻量而强大的日志框架；好用不解释。\n- [KVCache](http://github.com/jenly1314/KVCache) 一个便于统一管理的键值缓存库；支持无缝切换缓存实现。\n- [AndroidKTX](http://github.com/AndroidKTX/AndroidKTX) 一个简化 Android 开发的 Kotlin 工具类集合。\n- [AndroidUtil](http://github.com/AndroidUtil/AndroidUtil) 一个整理了Android常用工具类集合，平时在开发的过程中可能会经常用到。\n\n\u003c!-- end --\u003e\n\n## 版本日志\n\n#### v1.1.0：2023-1-4\n*  新增支持请求响应进度监听\n\n#### [查看更多版本日志](CHANGELOG.md)\n\n---\n\n![footer](https://jenly1314.github.io/page/footer.svg)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2Fretrofithelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjenly1314%2Fretrofithelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjenly1314%2Fretrofithelper/lists"}