Retrofit是Square公司開源的一個高質量高效率的HTTP庫,github上面star數量最多的Android網路庫就是這個。底層封裝了okhttp,JakeWharton大神的經典作品之一。
基本介紹
- 中文名:RETROFI程式
- 外文名:RETROFIT program
基本用法,定義一個接收數據的實體類,定義一個網路接口,創建Retrofit對象和service 對象,創建Call對象並執行異步請求,RETROFI註解類,請求方式註解,請求類型註解,請求參數註解,其它註解,
基本用法
定義一個接收數據的實體類
如右圖所示:
定義一個網路接口
GitHubService 非常簡單,不過卻做了很多工作,配置了:
請求方式:@GET
請求的相對路徑:"users/{user}/repos" 和Retrofit中的baseUrl可以拼成一個完整的URL路徑
請求的方法名字:listRepos
請求參數:@Path("user") String user
返回值:Call<List<Repo>> 返回一個Call對象,Call對象用於後面的網路請求。
請求方式:@GET
請求的相對路徑:"users/{user}/repos" 和Retrofit中的baseUrl可以拼成一個完整的URL路徑
請求的方法名字:listRepos
請求參數:@Path("user") String user
返回值:Call<List<Repo>> 返回一個Call對象,Call對象用於後面的網路請求。
GitHubService 這個接口中使用了很多註解,後面Retrofit會通過這些註解,把這個接口轉換成可調用的對象類。Retrofit中總共有四十多個類,其中一半多是註解類。
創建Retrofit對象和service 對象
代碼如下:
創建Call對象並執行異步請求
代碼如下:
RETROFI註解類
請求方式註解
@GET @POST、@PUT、@DELETE、@PATCH、@OPTIONS、@HTTP(自定義方式)
請求類型註解
@FormUrlEncoded、@Multipart、@Streaming
@FormUrlEncoded form表單請求,對應的 Content_Type:"application/x-www-form-urlencoded" 參數使用 @Field 或者 @FieldMap修飾。
@Multipart 支持上傳檔案的form表單。對應的 Content_Type:"multipart/form_data" 參數使用@Part修飾 檔案參數是okhttp中的RequestBody。
@Streaming 通過流的方式返迴響應。當返回數據較大的時候使用。或者用於大檔案的下載。
請求參數註解
@Query 、@QueryMap、@Body、@Field、@FieldMap、@Part、@PartMap 修飾方法參數
@Query :用於添加查詢參數 拼接參數如:name=張三&six=男&page=1。 參數值可以為空。
@QueryMap : 每一項發鍵和值都不能為空。
@Body: 可以直接傳一個對象 參數不能為null。可以上傳檔案 其參數是okhttp中的MultipartBody 類。
@Field 用String.valueOf()把參數值轉換為String,然後踐行URL編碼,當參數值為null時,會自動忽略。
@FieldMap: 每一項的鍵和值都不能為空。
@Part:用於定義Multipart請求的每個part 參數值可以為空,為空時,則忽略。
@PartMap 每一項的鍵和值都不能為空。
其它註解
@Path、@Header、@Headers、@Url
@Path:用於方法的參數 用於替換url中的參數,參數的值不能為空。
@Header 用於添加請求頭 如果請求頭部固定可以使用這個添加。可以為空,當為空時,會自動忽略。
@Headers 用於添加一個或多個請求頭中。
@Url: 用於添加請求的接口地址。