添加以下配置到你项目根目录的build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
在你项目module中的build.gradle
中添加依赖
dependencies {
// For android compat
implementation 'com.github.zeropercenthappy:RetrofitUtils:1.2.1'
// For androidX
implementation 'com.github.zeropercenthappy:RetrofitUtils:1.3.5'
}
val retrofit = RetrofitBuilder()
.baseUrl(url)
// 可选: 如果你想禁用cookies管理器(框架将自动处理cookies,如果你设置为false,记得自己处理)
.handleCookie(false)
// 可选: 如果你有额外的请求参数要添加
.addParam(key, value)
// 可选: 如果你有额外的header要添加
.addHeader(key, value)
// 可选: 如果你有额外的拦截器要添加
.addInterceptor(yourInterceptor)
// 可选: 如果你有额外的网络拦截器要添加
.addNetworkInterceptor(yourInterceptor)
// 可选: 如果你要自定义connect超时时间(默认10秒)
.connectTimeout(10_000)
// 可选: 如果你要自定义read超时时间(默认10秒)
.readTimeout(10_000)
// 可选: 如果你要自定义write超时时间(默认10秒)
.writeTimeout(10_000)
// 可选: 如果你有Converter要添加,比如GsonConverter
.addConverterFactory(GsonConverterFactory.create())
// 可选: 如果你有CallAdapter要添加
.addCallAdapterFactory(yourCallAdapter)
// 可选: 如果你想修改okHttp builder
.okHttpClientBuilderOption { okHttpBuilder ->
}
// 可选: 如果你想设置缓存上限(设为-1即关闭缓存)
.setMaxCacheSize(1024_000)
.build(context)
val api =retrofit.create(Api::class.java)
创建text/plain
body
RequestBodyBuilder.createText(content)
创建multilpart body part
: ( 框架会自动处理文件的mimetype,只需要传入带有接口规定的key和你要传的file的map即可)
RequestBodyBuilder.createMultipartBodyPartList(fileMap)
创建application/json
body
RequestBodyBuilder.createJson(json)
提供了StringConverter
,可以用于当希望结果直接是String,便于开发者自行处理时:
addConverterFactory(StringConverterFactory())
定义接口,返回类型为Call<String>
@FormUrlEncoded
@POST(Url.POST)
fun query(@Field("name") name: String): Call<String>
提供了CoroutineConverter
,支持在协程内进行请求,整个请求只需几行代码:
addCallAdapterFactory(CoroutineCallAdapterFactory())
定义接口,返回类型为CoroutineCall<T>
@FormUrlEncoded
@POST(Url.POST)
fun query(@Field("name") name: String): CoroutineCall<QueryBean>
然后在协程中进行请求
try {
val coroutineCall = api.query(name)
val queryBean = coroutineCall.request()
// 请求成功,做你自己的后续逻辑处理
} catch (e: Exception) {
// 请求失败或取消
e.printStackTrace()
}
顺带一提,从2.6.0的Retrofit开始,Retrofit已经天生支持协程内进行请求了,只需要在定义接口时加上suspend
,返回类型直接是最终类型
@FormUrlEncoded
@POST(Url.POST)
suspend fun query(@Field("name") name: String): QueryBean
然后在协程中进行请求
try {
val queryBean = api.query(name)
// 请求成功,做你自己的后续逻辑处理
} catch (e: Exception) {
// 请求失败或取消
e.printStackTrace()
}
如果你感兴趣的话,可以自行查找资料了解更多用法 :)