Retrofit初體驗

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)

對於請求頭信息有兩種使用方式:

  1. 在方法上標註使用的消息頭信息@Headers
  2. 在方法的參數中標註是消息頭信息@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請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章