目录
一 概述
是Android一个restful风格的网络请求框架,本质上还是OkHttp进行请求,Retrofit负责对接口的封装。 Retrofit 接口层封装请求参数、Header、Url 等信息。
二 优点
我们先看OkHttp的缺点,
1)接口配置繁琐,尤其是需要配置body、header、参数等时候
2)需要手动对拿到的responseBody进行解析,不好复用
3)没自动线程切换
Retrofit的优点就是对上面的缺点进行了优化。
三 代码
注意BaseUrl要以/结尾,不然会报错。
这里是一个get请求示例。
网址是${BASE_URL}test?name = " "&age = “”
3.1 Api
对请求网址参数进行封装
interface Api {
@GET("test")
suspend fun getUser(
@Query("name") name: String,
@Query("age") age: String
):ApiResponse<List<User>>
}
bean类User
data class User(
val name: String = "",
val age: String = ""
)
Response封装
data class ApiResponse<T>(
val code: String,
val data: T
)
3.2 RetrofitManager
创建OkHttpClient实例,创建Retrofit 实例和传入的 serviceClass(一个接口类)来创建一个实现了该接口的网络服务实例。
private val okHttpClient: OkHttpClient
get() =OkHttpClient.Builder()
//日志拦截器
.addInterceptor(logInterceptor)
//请求超时时间
.connectTimeout(TIME_OUT_SECONDS,TimeUnit.SECONDS)
.build()
fun<T> getService(serviceClass: Class<T>,baseUrl: String? = null) : T{
return Retrofit.Builder()
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())//添加Gson转换器
.baseUrl(BASE_URL)
.build()
.create(serviceClass)
}
3.3 DataRepository
继承Api, 用Api类来创建请求服务实例,重写Api的方法,返回服务实例进行调用的结果。
object DataRepository: Api {
private val service by lazy { RetrofitManager.getService(Api::class.java) }
override suspend fun getUser(
name: String,
age: String
): ApiResponse<List<User>> {
return service.getUser(name, age)
}
}
3.4 在ViewModel中请求
fun getUser(name: String,age: String){
viewModelScope.launch {
val result = DataRepository.getUser()
Log.d("tian", "retrofit:$result")
}
}
3.4 最后在ui里面调用
getUser("","")
标签:String,val,记录,age,Api,Android,Retrofit,name
From: https://blog.csdn.net/qq_45077023/article/details/140413806