Kevin Learn Kotlin:网络编程(retrofit
2021-12-17 本文已影响0人
Kevin_小飞象

retrofit

Retrofit 是一个基于 okhttp 的 RESTful 网络请求框架,功能强大、简洁易用及高扩展性。
注解
Retrofit 注解驱动型上层网络请求框架,使用注解来简化请求,大体分为以下几类:
-
用于标注网络请求方式的注解
image.png
-
标记网络请求参数的注解
image.png
image.png
-
用于标记网络请求和响应格式的注解
image.png
开始使用
- 添加依赖:
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
- 初始化
/**
* Created on 2021/12/16 16:46
*
* @author Gong Youqiang
*/
object RetrofitHelper {
private const val BASE_URL = "http://10.0.2.2/"
private val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.build()
private var retrofit:Retrofit = Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create()) // 数据转换适配器
.build()
fun <T> create(clazz : Class<T>): T {
return retrofit.create(clazz)
}
}
- 接口方法
/**
* Created on 2021/12/17 9:32
*
* @author Gong Youqiang
*/
interface ApiService {
@GET(value = "user/query")
fun queryUser(@Query(value = "userId",encoded = true) userId : String):Call<String>
}
- 使用
RetrofitHelper.create(ApiService::class.java)
.queryUser("1600932269")
.enqueue(object :Callback<UserBean>{
override fun onResponse(call: Call<UserBean>, response: Response<UserBean>) {
Log.e(TAG, response.body()?.toString()?:"not data" )
}
override fun onFailure(call: Call<UserBean>, t: Throwable) {
Log.e(TAG, t.message?:"unknown reason" )
}
})