Retrofit初體驗
在代碼家的gankio上經常出現關於使用Retrofit的例子,google了一下。Retrofit是一個類型安全的http客戶端。聽網上說Retrofit和Rx系列更配哦。
首先在AndroidStudio中引入Retrofit的jar包。通過compile'com.squareup.retrofit2:retrofit:2.1.0'
來進行引入。
Retrofit把我們的http api請求封裝成接口的方法
public interface GetRandomDatas {
@GET("random/data/{category}/{sum}")
Call<RandomAndCategoryDatas> listRope(@Path("category") String category, @Path("sum") int sum);
}
Retrofit提供了GET、POST、PUT、DELETE、和HEAD 5中註解。分別對應各自的http請求。在使用這些註解時需要輸入的是請求的相對路徑。
在使用GET註解時可用使用{}和@Path
註解對GET中的內容進行替換例如上面的例子random/data/{category}/{sum}
和方法中的@Path("category") String category, @Path("sum") int sum
使用方法中傳入的category和sum去替換路徑中的category和sum。在GET註解中可用使用@query作爲路徑?sort=xx
替代方法。使用Query()
註解後,在GET()
註解中就不用填寫查詢參數了。對於多查詢的情況可用使用QueryMap()
註解進行封裝。
在使用POST()
註解時,通過使用@Body()
註解來指定request的body中的內容。
@POST("/users/new")
Call<User> createUser(@Body User user);
通過使用@FormUrlEncoded
註解來對發送的內容進行編碼。每一個鍵值對都使用@Field()
註解來表示對應關係。
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last
對於多部分的請求而言在方法上使用@Multipart()
註解來進行說明。每一個部分都使用@Part()
註解來說明。
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description)
對於請求頭信息有兩種使用方式:
- 在方法上標註使用的消息頭信息
@Headers
- 在方法的參數中標註是消息頭信息
@Header
使用@Headers
註解表示使用的靜態的頭信息,而使用@Header
註解可用動態的改變頭信息。具體的使用方法如下:
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
使用的方式也非常簡單:
Retrofit retrofit=new Retrofit.Build()
.baseUrl("")
.addConverterFactory(GsonConverterFactory.create())
.build()
addConverterFactory(GsonConverterFactory.create())
該方法是添加一個Gson的轉換器。然後就可用通過retrofit.create()
方法得到自己所定義的接口的實力,通過調用自己在接口中定義的Call<T t>
方法得到Call的實例,call有兩個方法進行http請求分別是execute()
和enqueue()
方法,前者是進行同步請求後者是使用異步請求,在android中推薦使用後面一種方式進行http請求。