Android網路請求(終) 網路請求框架Retrofit
Retrofit底層是由OkHttp封裝的,Retrofit對于注解的使用十分頻繁,所以不了解注解的同學們可以去查查資料什么的,
這里有一個小細節,要使用Retrofit至少需要jdk1.8以上和Android API 21以上
Android架構中的MVVM所普遍使用的網路請求框架就是Retrofit,
我們說了,注解的使用很平凡,那么我們來看看Retrofit的注解有哪些吧,
注解
| 注解 | 含義 |
|---|---|
| @GET | 通過GET方式請求 |
| @POST | 通過POST方式請求 |
| @DELETE | 通過DELETE方式請求 |
| @PUT | 通過PUT方式請求 |
| @HEAD | 通過HEAD方式請求 |
| @OPTIONS | 通過OPTIONS方式請求 |
| @PATCH | 通過PATCH方式請求 |
以上的都是請求方式,這里就知道了我們并不是只能有四種請求方式的,
還有一些對這個請求進行標注的注解,
| 注解 | 含義 |
|---|---|
| @Headers | 給請求添加請求頭 |
| @Path | 用于restful風格的請求替換其中的路徑 |
| @Query | 用于標注請求的引數,一般get請求 |
| @FormUrlEncoded | 表示這個請求以表單的方式提交 |
| @Field | 用于標注請求的引數,一般post請求 |
| @Body | 用于標注請求的引數,一般是一個請求體,可以上傳檔案或者是一個類 |
上面的就是Retrofit常用注解了,
Retrofit的使用
匯入依賴
這里要匯入兩個依賴包,分別是retrofit2和gson的,因為retrofit2支持直接將獲取到的資料轉換成物體類物件,方便我們使用,
在專案檔案下build.gradle(app)的dependencies中匯入所需要的庫
implementation group: 'com.squareup.retrofit2', name: 'retrofit', version: '2.6.3'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
網路請求
我們先新建一個網路請求類,在其中實體化retrofit,
// 請求地址
public static String IP = "http://www.baidu.com";
// 實體化Retrofit
private static Retrofit retrofit = new Retrofit.Builder()
// 設定Retrofit的基礎網路地址
.baseUrl(IP)
// 添加gson實體化工廠
.addConverterFactory(GsonConverterFactory.create())
.build();
設定了baseUrl(IP),之后通過該物件發起的網路請求中默認在你的請求連接地址前加上IP,
新建一個介面,用于存放網路請求的各個地址
public interface Link {
@GET("/s?wd=堅定不移推動構建亞太命運共同體")
Call<String> getBaiDu();
}
在我們的網路請求類中創建一個可以訪問到該介面的方法,
public static Link getLink(){
return retrofit.create(Link.class);
}
這里使用的都是公開靜態方法和變數,是為了在其他類中更加方便的使用網路請求類,
在MainActivity中去呼叫它
Net.getLink().getBaiDu().enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
String body = response.body();
System.out.println(body);
}
@Override
public void onFailure(Call<String> call, Throwable throwable) {
}
});
這短代碼中只需要你通過網路請求類Net訪問Link結構getLink(),呼叫請求方法getBaiDu();我們會通過get方法去訪問如下地址
http://www.baidu.com/s?wd=堅定不移推動構建亞太命運共同體
這其實就是將baseUrl和@GET中的地址拼接起來了,最基本的使用就是這么簡單,
當然了,如果我們想將搜索的值設定為一個由用戶輸入的變數,我們修改getBaiDu方法
@GET("/s")
Call<String> getBaiDu(@Query("wd") String value);
那么在呼叫時可以作為一個引數傳入到該請求中,如
Net.getLink().getBaiDu("堅定不移推動構建亞太命運共同體").enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
String body = response.body();
System.out.println(body);
}
@Override
public void onFailure(Call<String> call, Throwable throwable) {
}
});
如果我們的引數是restful風格的,那么我們需要修改以下傳遞的引數,比如/s就是restful風格,我們就這么改
@GET("/{path}")
Call<String> getBaiDu(@Path("path") String path,@Query("wd") String value);
那么我們在呼叫時只需要全部以引數的形式傳遞即可
Net.getLink().getBaiDu("s","堅定不移推動構建亞太命運共同體").enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
String body = response.body();
System.out.println(body);
}
@Override
public void onFailure(Call<String> call, Throwable throwable) {
}
});
這些效果都是一樣的,
如果你需要傳入請求頭,那么就多加一個引數,如
@Headers({
"Accept: application/json",
"User-Agent: Retrofit-Sample-App"
})
@GET("/{path}")
Call<String> getBaiDu(@Path("path") String path,@Query("wd") String value);
說明
以上注解都是可以用的,如你想post請求那么使用@POST,效果都是一樣的,靈活切換,多嘗試,Restful的特點就是對開發者特別友好, 性能好,處理快,使用簡單、 使用REST API非常方便、支持NIO(新的IO API,可以替代標準的Java IO API)、 默認使用Gson決議 ,
想要了解更多的可以去搜一搜這些注解,使用方式就是這么簡單,也沒多復雜,
可以和LiveData、ViewModle、Rxjava構建MVVM專案結構
網路請求總結
網路請求就到這里了,基本上這些網路框架就是我們日常開發中的全部了,至于HttpClient,它的使用不比java原生的HttpURLConnection方便到哪里去,我就不講了,同樣感興趣的可以去自行查閱資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/538233.html
標籤:Android
