Android 請求方式無非就是 POST、PUT、DELETE以及HEAD 這幾種,
Retrofit 中的註解:
1. GET ———-查找資源(查)
2. POST ——–修改資源(改)
3. PUT ———-上傳文件(增)
4. DELETE —-刪除文件(刪)
5. HEAD——–只請求頁面的首部
@QueryMap、@Path、@Body、@FormUrlEncoded/@Field、@Header/@Headers。我們來看一下他們的區別:
@Query(GET請求):
用於在url後拼接上參數,例如:
@GET("book/search")
Call<Book> getSearchBook(@Query("q") String name);//name由調用者傳入
相當於:
@GET("book/search?q=name")
Call<Book> getSearchBook();
@QueryMap(GET請求):
當然如果入參比較多,就可以把它們都放在Map中,例如:
@GET("book/search")
Call<Book> getSearchBook(@QueryMap Map<String, String> options);
@Path(GET請求):
用於替換url中某個字段,例如:
@GET("group/{id}/users")
Call<Book> groupList(@Path("id") int groupId);
像這種請求接口,在group和user之間有個不確定的id值需要傳入,就可以這種方法。我們把待定的值字段用{}括起來,當然 {}裏的名字不一定就是id,可以任取,但需和@Path後括號裏的名字一樣。如果在user後面還需要傳入參數的話,就可以用Query拼接上,比如:
@GET("group/{id}/users")
Call<Book> groupList(@Path("id") int groupId,@Query("sort") String sort);
當我們調用這個方法時,假設我們groupId傳入1,sort傳入“2”,那麼它拼接成的url就是group/1/users?sort=2,當然最後請求的話還會加上前面的baseUrl。
@Body(POST請求):
可以指定一個對象作爲HTTP請求體,比如:
@POST("users/new")
Call<User> createUser(@Body User user);
它會把我們傳入的User實體類轉換爲用於傳輸的HTTP請求體,進行網絡請求。
@Field(POST請求):
用於傳送表單數據:
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);
注意開頭必須多加上@FormUrlEncoded這句註釋,不然會報錯。表單自然是有多組鍵值對組成,這裏的first_name就是鍵,而具體傳入的first就是值啦。
@Header/@Headers(POST請求):
用於添加請求頭部:
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
表示將頭部Authorization屬性設置爲你傳入的authorization;當然你還可以用@Headers表示,作用是一樣的比如:
@Headers("Cache-Control: max-age=640000")
@GET("user")
Call<User> getUser()
當然你可以多個設置:
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("user")
Call<User> getUser()
好了,這樣我們就把上面這個RetrofitService 接口類解釋的差不多了。