Android網路請求(3) 網路請求框架OkHttp 本節我們來講解OkHtpp網路請求框架 什麼是網路請求框架 在我的理解中,網路請求框架是為了方便我們更加便捷規範的進行網路請求所建的類,我們通過調用該類中的方法可以快速地進行網路請求,切幫我們封裝好了一些數據的處理方法,方便我們用更少的代碼去做 ...
Android網路請求(3) 網路請求框架OkHttp
本節我們來講解OkHtpp網路請求框架
什麼是網路請求框架
在我的理解中,網路請求框架是為了方便我們更加便捷規範的進行網路請求所建的類,我們通過調用該類中的方法可以快速地進行網路請求,切幫我們封裝好了一些數據的處理方法,方便我們用更少的代碼去做更多的事。
Android常見的網路請求框架
在android開發中,除了java原生的HttpURLConnection,常見的網路請求框架有
OkHttp
Volley
Retrofit
HttpClient
這其中最好用的莫過於Retrofit了,但是Retrofit是在OkHttp基礎上再次進行封裝的,所以我們先瞭解OkHttp網路請求,這對於我們日後的安卓開發也是有著很大的幫助。
OkHttp進行四種請求
導入依賴
在項目文件下build.gradle(app)的dependencies中導入所需要的庫
implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.12.0'
這裡我們使用3.12.0版本,如果需要使用其他版本,修改version版本號為自己想要的版本。
創建四種方法
GET
public static String get(String src){
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 構建request請求
Request request = new Request.Builder()
.url(src)
.get()
.build();
// 發送請求獲取返回數據
Call call = okHttpClient.newCall(request);
// 獲取響應體
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 轉換成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
可以看出這些代碼對比起java原生的HttpURLConnection請求來說,簡短了很多,不再需要設置一些超時,IO流之類的操著,那麼因為OkHttp封裝時給定了預設值,這樣就大大減少了我們的工作量,我們現在只需要發送請求獲取響應數據就行了。
POST
public static String post(String src,String json){
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 構建請求體
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 構建request請求
Request request = new Request.Builder()
.post(requestBody)
.url(src)
.build();
// 發送請求獲取返回數據
Call call = okHttpClient.newCall(request);
// 獲取響應體
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 轉換成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
可以看出,這裡我們只是修改了.get為.post並且傳入了請求體,等於只需要新構建一個請求體,將我們的要向服務端發送的數據加入其中即可,這裡我們使用的時application/json的方式,其他方式在第二篇提過一下,感興趣的可以自己查閱資料。
PUT
put請求就更簡單了,在原post請求中修改.post為.put即可,沒有任何難度
public static String put(String src,String json){
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 構建請求體
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 構建request請求
Request request = new Request.Builder()
.url(src)
.put(requestBody)
.build();
// 發送請求獲取返回數據
Call call = okHttpClient.newCall(request);
// 獲取響應體
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 轉換成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
DELETE
delete請求有兩種不同的方式:攜帶參數與不攜帶參數。
攜帶參數:攜帶參數實在原post請求中將.post修改為.delete,一樣的傳入一個請求體即可
public static String delete(String src,String json){
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 構建請求體
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"),json);
// 構建request請求
Request request = new Request.Builder()
.url(src)
.delete(requestBody)
.build();
// 發送請求獲取返回數據
Call call = okHttpClient.newCall(request);
// 獲取響應體
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 轉換成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
不攜帶參數則時在get請求上重寫,將.get修改為.delete即可
public static String delete(String src){
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient();
// 構建request請求
Request request = new Request.Builder()
.url(src)
.delete()
.build();
// 發送請求獲取返回數據
Call call = okHttpClient.newCall(request);
// 獲取響應體
ResponseBody body = null;
String string = null;
try {
body = call.execute().body();
// 轉換成string
string = body.string();
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
相信經歷過HttpURLConnection那複雜的網路請求設置後,OkHttp框架將會讓你更加快樂的進行網路開發。
修改預設設置
上面我們說過,OkHttp預設幫我們配置好了設置,那麼我們不想使用預設設置該怎麼辦呢。
我們可以在創建OkHttpClient類的時候使用鏈式調用的方式來設置預設的參數,如
// 實例化OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// 一天
.connectTimeout(Duration.ofDays(1))
// 系統預設dns
.dns(Dns.SYSTEM)
.build();