zgq105 / blog

2 stars 0 forks source link

Retrofit源码分析 #101

Open zgq105 opened 2 years ago

zgq105 commented 2 years ago

1.Retrofit使用流程

1.定义服务接口,遵循Rest API风格,如下:

/**
 * Created by zgq105@gmail.com on 2022/6/6 21:38
 */
interface Service1 {
    @GET("get?aid=2608&uuid=7101473367786735119&not_self=1")
    fun getData(@Query("p1") p1:String):Call<ServiceData1>
}

2.定义接口数据返回接收实体类,如下:

/**
 * Created by zgq105@gmail.com on 2022/6/6 22:03
 */
data class ServiceData1(
//{"err_no":0,"err_msg":"success","data":null}
    @SerializedName("err_no") val errNo:Int,
    @SerializedName("err_msg") val errMsg:String,
    @SerializedName("data") val data: Any
)

3.创建Retrofit对象并获取服务接口对象,如下:

//创建Retrofit对象
val url =
            "https://api.juejin.cn/user_api/v1/user/"
val retrofit = Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .build()

//获取服务接口对象
val service1 = retrofit.create(Service1::class.java)

//调用接口
val call = service1.getData("param1")

//同步调用
call.execute().body()

//异步调用
call.enqueue(callback)

2.Retrofit的内部实现过程分析

Retrofit的内部实现过程主要是使用了动态代理的机制和注解和反射的机制来实现对OKhttp的上层封装,具体过程如下:

Retrofit