Retrofit入門學(xué)習(xí)

一、什么是Retrofit

Retrofit主要是對Android網(wǎng)絡(luò)請求的框架的封裝,它遵循Restful設(shè)計(jì)風(fēng)格,底層基于OkHttp。

換句說,網(wǎng)絡(luò)請求的工作本質(zhì)上是OkHttp完成,而Retrofit僅負(fù)責(zé)網(wǎng)絡(luò)請求接口的封裝。


Retrofit的使用步驟

1、創(chuàng)建描述網(wǎng)絡(luò)請求的接口

public interface ServiceApi {

// 接口涉及到解耦,userLogin 方法是沒有任何實(shí)現(xiàn)代碼的

?@GET("LoginServlet")

?CalluserLogin(@Query("userName") String userName, @Query("password") String userPwd);

}

2、創(chuàng)建Retrofit實(shí)例,此處使用了Builder設(shè)計(jì)模式,創(chuàng)建了Retrofit實(shí)例

Retrofit retrofit =new Retrofit.Builder().

????baseUrl("http://192.168.29.95:8080/OkHttpServer/").

????client(okHttpClient).build();

3、創(chuàng)建網(wǎng)絡(luò)請求接口實(shí)例 并 配置網(wǎng)絡(luò)請求參數(shù)

mServiceApi = retrofit.create(ServiceApi.class);//創(chuàng)建網(wǎng)絡(luò)請求接口實(shí)例

此處用了動(dòng)態(tài)代理的模式創(chuàng)建接口實(shí)例 源碼如下:

Call<UserLoginResult> login = RetrofitClient.getServiceApi().userLogin("Darren", "988514");//配置網(wǎng)絡(luò)請求參數(shù)

//網(wǎng)絡(luò)請求參數(shù)的封裝將會在封裝OkHttpCall時(shí)進(jìn)行

4、發(fā)送網(wǎng)絡(luò)請求

發(fā)送網(wǎng)絡(luò)請求.png

最終會執(zhí)行到封裝的okHttpCall中,代碼如下:


5、處理服務(wù)器返回的數(shù)據(jù)

? ? 在parseBody()中進(jìn)行解析;

// 獲取解析類型 T 獲取方法返回值的類型?

Type returnType = method.getGenericReturnType();?

// 返回值對象?

Class <T> dataClass = (Class <T>) ((ParameterizedType) returnType).getActualTypeArguments()[0];?

// 最后在用解析工廠去轉(zhuǎn)換?

//解析完后 進(jìn)行回調(diào)就完成了一次網(wǎng)絡(luò)請求了

三、注解詳解

1、方法注解:@GET @POST、@PUT、@DELETE、@PATCH、@OPTIONS、@HTTP


2、標(biāo)記注解:@FormUrlEncoded、@Multipart、@Streaming

@FormUrlEncoded -- 用于修飾Fiedl注解 和FileldMap注解,表示請求正文將使用表單網(wǎng)址編碼

@Multipart -- 作用于方法,表示請求體是多部分的,每個(gè)部分作為一個(gè)參數(shù),且用Part注解聲明

@Streaming -- 作用于方法未使用@Straming 注解,默認(rèn)會把數(shù)據(jù)全部載入內(nèi)存,返回?cái)?shù)據(jù)較大時(shí)需要使用該注解。


3、參數(shù)注解:@Query 、@QueryMap、@Body、@Field、@FieldMap、@Part、@PartMap

@Query:作用于方法參數(shù),用于添加查詢參數(shù),即請求參數(shù),(參數(shù)值可以為空,為空時(shí),忽略該值)例如:


@Query用于方法參數(shù)

@QueryMap:作用于方法的參數(shù),以map的形式添加查詢參數(shù),即請求參數(shù)(map中的每一項(xiàng)發(fā)鍵和值都不能為空)


4、其他注解:@Path、@Header、@Headers、@Url

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容