一、添加依赖:
//Retrofit 网络请求
implementation("com.squareup.retrofit2:retrofit:2.3.0")
implementation("com.squareup.retrofit2:converter-gson:2.3.0")//json转换
二、创建单例类:
package com.example.buju.http
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
/**
* retrofit网络请求
* */
object HiRetrofit {
val client = OkHttpClient.Builder()// builder构造者设计模式
.connectTimeout(10, TimeUnit.SECONDS)//连接超时时间
.readTimeout(10, TimeUnit.SECONDS)// 读取超时
.writeTimeout(10, TimeUnit.SECONDS)// 写超时
.addInterceptor(LoggingInterceptor())// 自定义拦截器
.build()
private var retrofit:Retrofit = Retrofit.Builder() // Builder构造者设计模式
.client(client)// 借助okhttp3创建的client
.baseUrl("baseUrl")// 网络请求前面的公共地址
.addConverterFactory(GsonConverterFactory.create())// 数据转换适配器
.build()
fun <T> create(clazz: Class<T>):T{
return retrofit.create(clazz)
}
}
三、创建网络请求Api:
package com.example.buju.http
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Query
/**
* retrofit网络请求定义Api
* */
interface ApiService {
// 根据用户id查询信息
@GET(value = "user/query")
fun queryUser(@Query(value="userId",encoded = true) userId:String):Call<HashMap<String,String>>
}
使用:
val apiService:ApiService = HiRetrofit.create(ApiService::class.java)
apiService.queryUser("0001").enqueue(object:Callback<HashMap<String,String>>{
override fun onResponse(
call: Call<HashMap<String, String>>,
response: Response<HashMap<String, String>>
) {
Log.e("Retrofit",response.body()?.toString() ?:"不知道原因")
}
override fun onFailure(call: Call<HashMap<String, String>>, t: Throwable) {
Log.e("Retrofit",t.message?:"不知道原因")
}
})