基於OkHttp的封裝庫TigerOkHttp的使用

在前面熟悉了OkHttp的用法以後,爲了簡化用法同時適用於個人項目,我針對OkHttp進行了更進一步的封裝(源碼及其Demo地址在https://github.com/huyongli/TigerOkHttp)git

TigerOKHttp特性

封裝以後其支持的功能特性包括以下:github

  1. 通常的get同步阻塞請求和異步請求數組

  2. 通常的post同步阻塞請求和異步請求緩存

  3. 實現了文件上傳功能(包含文件上傳進度回調顯示)app

  4. 實現了大文件下載功能,只須要指定文件下載路徑便可,也包含了下載進度的回調顯示框架

  5. 實現了請求結果的自動解析,用戶也能夠根據需求擴展自定義結果解析類異步

  6. 對全部請求都支持直接將結果解析轉換爲JavaBean對象或集合ide

  7. 支持對返回結果結構的自定義,例如設置返回結果結構爲:{flag:1|0,error:錯誤信息,result:請求結果},結果解析的時候會按照此結構進行結果解析函數

  8. 支持取消某個請求post

若是還不知道如何使用OkHttp請參考個人上一篇文章 Android中OkHttp的使用 進行了解。

初始化配置

全部的請求在使用以前,先在Application裏執行TigerOkHttp.init(new TigerHttpConfig(getApplicationContext()));進行TigerOkHttp的初始化操做。

TigerHttpConfig中主要是設置請求的全局性配置:

  1. TigerHttpConfig.readTimeOut:設置全局請求的數據讀取超時時間,默認爲30s

  2. TigerHttpConfig.writeTimeOut:設置全局請求的數據寫入超時時間,默認爲15s

  3. TigerHttpConfig.connectTimeOut:設置全局請求的鏈接超時時間,默認爲15s

  4. TigerHttpConfig.cacheSize:設置全局請求的緩存大小,默認爲10M

  5. TigerHttpConfig.cacheDirectory:設置全局請求的緩存存儲路徑,默認爲系統給應用分配的緩存路徑

  6. TigerHttpConfig.isWrapperResult:設置全局請求結果是否對結果進行了封裝,默認爲true

  7. TigerHttpConfig.wrapperJsonResult:設置全局請求結果的結構類型,在isWrapperResult爲true時才起做用

WrapperJson主要自定義設置全局請求結果的結構類型:

  1. WrapperJson.code_name:設置請求成功與否的狀態碼字段,默認爲:flag

  2. WrapperJson.result_name:設置請求成功後結果字段,默認爲:result

  3. WrapperJson.error_name:設置請求失敗後的錯誤信息字段(僅在請求失敗時纔有值),默認爲:error

  4. WrapperJson.code_error_value:設置請求失敗的狀態碼值,當請求狀態碼與此值相等時表明請求失敗

Get請求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*-------------------- 如下爲Get同步阻塞請求 -------------------------------*/
//根據請求URL構造請求對象,請求成功後直接返回結果爲Model對象
TigerJsonRequest<Model> request = new TigerJsonRequest<Model>(URL, Model.class);
/*
* 若是要同步請求返回Model集合的話,請求對象這樣構造
* TigerJsonRequest<List<Model>> request = new TigerJsonRequest<List<Model>>(URL, Model.class);
*/
//如下添加三個請求參數
request.addParam( "value", "同步get請求-返回Model")
.addParam( "isModel", true)
.addParam( "isList", false);
//同步阻塞請求,直接返回Model對象
Model result = TigerOkHttp.getSync(request);
//同步阻塞請求,直接返回Model集合
//List<Model> result = TigerOkHttp.getSync(request);
/*-------------------- 如下爲Get異步請求 ------------------------------*/
//根據請求URL構造請求對象,請求成功直接返回結果爲Model集合
TigerJsonRequest<List<Model>> request = new TigerJsonRequest<List<Model>>(URL);
//添加三個請求參數
request.addParam( "value", "異步get請求-返回List<Model>")
.addParam( "isModel", true)
.addParam( "isList", true)
.setRequestCallback( new RequestCallback<List<Model>>() {//設置異步請求回調
@Override
public void onSuccess(List<Model>result) {
showResult(result.toString());
}
 
@Override
public void onFailure(TigerHttpException e) {
showResult(e.getMessage());
}
});
//開始異步請求
TigerOkHttp.getAsync(request);

上面即爲通常Get同步阻塞請求和異步請求的方式,對這兩個請求須要說明幾點:

  1. 首先根據請求URL構造一個請求對象TigerJsonRequest,若是爲同步阻塞請求必須調用具備兩個參數的構造函數以設置請求地址和設置請求返回的結果類型,若是是異步請求則只須要調用一個參數的構造函數設置請求地址便可(異步請求的返回結果類型會自動根據泛型判斷)

  2. 在請求對象添加此請求相關的請求參數

  3. 若是是異步請求,在請求對象中添加異步請求回調接口RequestCallback

  4. 根據是否爲異步請求在TigerOkHttp中選擇對應的請求方法開始請求操做

  5. 若是解析後返回Model對象話,服務端返回的結果必須是JSON字符串,若是解析後返回Model集合的話,服務端返回的結果必須是JSON數組字符串

Post請求

這裏的Post同步、異步請求和上面的Get的同步異步請求方式基本上同樣,構造請求對象TigerJsonRequest的方式是如出一轍的,惟一的區別只是在最後發起請求操做上更換了請求方法

  1. post同步阻塞請求的發起方式爲:T result = TigerOkHttp.postSync(request);

  2. post異步請求的發起方式爲:TigerOkHttp.postAsync(request);

自定義結果解析器

TigerJsonRequest自帶的默認解析器TigerJsonParser沒法知足你的功能需求時,咱們只須要簡單的兩步便可爲某次請求實現自定義解析器:

  1. 繼承TigerParser<T>(會自動根據設置的全局結果結構進行解析判斷請求是否成功、拿到請求的真正結果數據)這個解析基類而後實現public abstract T parser(BufferedSource source) throws TigerHttpException;方法

  2. 經過TigerJsonRequest類中的方法setDataParser(TigerParser dataParser)設置這次請求的結果解析器

上傳文件

上傳文件模塊我是在TigerJsonRequest基礎上擴展出了一個專門針對上傳文件的請求對象TigerUploadRequest,具體的上傳文件實現方式以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//根據上傳請求地址和文件路徑構造文件上傳請求對象
TigerUploadRequest<String> request = new TigerUploadRequest<String>(url, filePath);
//設置上傳回調監聽
request.setRequestCallback(
new RequestCallback<String>() {
@Override
public void onPreExecute() {
super.onPreExecute();
//此處能夠初始化顯示上傳進度UI
}
 
@Override
public void onSuccess(String result) {
//文件上傳成功
}
 
@Override
public void onLoading(long count, long current) {
super.onLoading(count, current);
//此處能夠更新上傳進度
}
@Override
public void onFailure(TigerHttpException e) {
//文件上傳失敗
}
 
@Override
public void onAfterExecute() {
super.onAfterExecute();
//此處能夠隱藏上傳進度條
}
});
//發起上傳操做
TigerOkHttp.postAsync(request);

下載文件

下載文件功能須要用到另一個請求對象TigerFileRequest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//根據下載請求地址和下載文件的保存路徑構造請求對象
TigerFileRequest request = new TigerFileRequest(URL, fileSavePath);
//添加一個請求參數
request.addParam( "method", "download")
//設置下載過程當中的回調接口
.setRequestCallback( new RequestCallback<File>() {
@Override
public void onPreExecute() {
super.onPreExecute();
//此處初始化顯示下載進度條UI
}
@Override
public void onSuccess(File result) {
//下載成功,同時返回下載成功的文件
}
@Override
public void onLoading(long count, long current) {
super.onLoading(count, current);
//更新下載進度UI
}
@Override
public void onFailure(TigerHttpException e) {
//下載失敗
}
@Override
public void onAfterExecute() {
super.onAfterExecute();
//隱藏下載進度條UI
}
});
//發起下載請求
TigerOkHttp.getAsync(request);

取消某個請求

取消某個請求只須要調用TigerOkHttp.cancel(request.getTag())便可,若是沒有手動設置請求對象request的tag值,請求的時候會自動爲此次請求生成一個惟一的tag

以上基本上就是TigerOkHttp框架的全部功能的使用方法,歡迎各位下載使用。

因爲本人能力有限,此框架可能存在某些不足的地方,若是各位發現問題,歡迎提出,我會盡快解決,另外我會不斷豐富完善此框架的功能。

相關文章
相關標籤/搜索