RetrofitHelper
RetrofitHelper for Android 是一个为 Retrofit 提供便捷配置多个BaseUrl相关的扩展帮助类。
主要功能介绍
- [x] 支持配置多个BaseUrl
- [x] 支持动态改变BaseUrl
- [x] 支持动态配置超时时长
Gif 展示
引入
Maven:
<dependency>
<groupId>com.king.retrofit</groupId>
<artifactId>retrofit-helper</artifactId>
<version>1.0.0</version>
<type>pom</type>
</dependency>
Gradle:
//AndroidX 版本
implementation 'com.king.retrofit:retrofit-helper:1.0.0'
Lvy:
<dependency org='com.king.retrofit' name='retrofit-helper' rev='1.0.0'>
<artifact name='$AID' ext='pom'></artifact>
</dependency>
RetrofitHelper引入的库(具体对应版本请查看 Versions)
compileOnly "androidx.appcompat:appcompat:$versions.appcompat"
compileOnly "com.squareup.retrofit2:retrofit:$versions.retrofit"
因为 RetrofitHelper 的依赖只在编译时有效,并未打入包中,所以您的项目中必须依赖上面列出相关库
如果Gradle出现compile失败的情况,可以在Project的build.gradle里面添加如下:(也可以使用上面的JitPack来compile)
allprojects {
repositories {
//...
maven { url 'https://dl.bintray.com/jenly/maven' }
}
}
示例
主要集成步骤代码示例
Step.1 需使用JDK8编译,在你项目中的build.gradle的android{}中添加配置:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
Step.2 通过RetrofitUrlManager初始化OkHttpClient,进行初始化配置
//通过RetrofitHelper创建一个支持多个BaseUrl的 OkHttpClient
//方式一
val okHttpClient = RetrofitHelper.getInstance()
.createClientBuilder()
//...你自己的其他配置
.build()
//方式二
val okHttpClient = RetrofitHelper.getInstance()
.with(builder)
//...你自己的其他配置
.build()
//完整示例
val okHttpClient = RetrofitHelper.getInstance()
.createClientBuilder()
.addInterceptor(LogInterceptor())
.build()
val retrofit = Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(Gson()))
.build()
Step.3 定义接口时,通过注解标记对应接口,支持动态改变 BaseUrl相关功能
interface ApiService {
/**
* 接口示例,没添加任何标识,和常规使用一致
* @return
*/
@GET("api/user")
fun getUser(): Call<User>
/**
* Retrofit默认返回接口定义示例,添加 DomainName 标示 和 Timeout 标示
* @return
*/
@DomainName(domainName) // domainName 域名别名标识,用于支持切换对应的 BaseUrl
@Timeout(connectTimeout = 15,readTimeout = 15,writeTimeout = 15,timeUnit = TimeUnit.SECONDS) //超时标识,用于自定义超时时长
@GET("api/user")
fun getUser(): Call<User>
//--------------------------------------
/**
* 使用RxJava返回接口定义示例,添加 DomainName 标示 和 Timeout 标示
* @return
*/
@DomainName(domainName) // domainName 域名别名标识,用于支持切换对应的 BaseUrl
@Timeout(connectTimeout = 20,readTimeout = 10) //超时标识,用于自定义超时时长
@GET("api/user")
fun getUser(): Observable<User>
}
Step.4 添加多个 BaseUrl 支持
//添加多个 BaseUrl 支持 ,domainName为域名别名标识,domainUrl为域名对应的 BaseUrl,与上面的接口定义表示一致即可生效
RetrofitHelper.getInstance().putDomain(domainName,domainUrl)
//添加多个 BaseUrl 支持 示例
RetrofitHelper.getInstance().apply {
//GitHub baseUrl
putDomain(Constants.DOMAIN_GITHUB,Constants.GITHUB_BASE_URL)
//Google baseUrl
putDomain(Constants.DOMAIN_GOOGLE,Constants.GOOGLE_BASE_URL)
}
//通过setBaseUrl可以动态改变全局的 BaseUrl,优先级比putDomain(domainName,domainUrl)低,谨慎使用
RetrofitHelper.getInstance().setBaseUrl(dynamicUrl)
更多使用详情,请查看Demo中的源码使用示例或直接查看API帮助文档
版本记录
v1.0.0:2020-5-30
- RetrofitHelper初始版本
关于我
Name: Jenly
Email: jenly1314#gmail.com / jenly1314#vip.qq.com
CSDN: jenly121
CNBlogs: jenly
GitHub: jenly1314
Gitee: jenly1314
加入QQ群: 20867961