關於AsyncHttpClient使用

2021-07-15 10:00:55 字數 3588 閱讀 9452

在android開發中,傳送、處理http請求簡直太常見了,以至於我們的**裡到處充斥著各種httpclient和與之相關又臭又長的**,

它們存在於你**的各個角落,每次看見都令人作嘔,而你僅僅是為了server能返回乙個string或者json給你。每次當我自己寫這樣

的**時,我都會想能不能簡化下這個流程,可能2、3行**就能搞定。因為針對最簡單的case,我只需要提供request url,成功時的

callback和(或)失敗時的callback,僅此而已。針對這一類問題(需求),可以說android-async-http提供了幾乎完美的解決方案。

通過使用它可以大大簡化你的**,不僅如此,你的**看上去也優雅多了。

當我第一眼看到它時就被吸引住了,特別是async關鍵字,幹我們這行的都知道,這是非同步執行,也就是說它的網路請求自動在非ui

執行緒裡執行,你不需要任何額外的操作(比如手動new乙個thread之類)。專案的官方**:

我這裡簡要介紹下:它是專門針對android在apache的httpclient基礎上構建的非同步的callback-based http client。所有的請求

全在ui執行緒之外發生,而callback發生在建立它的執行緒中,應用了android的handler傳送訊息機制。你也可以把asynchttpclient應用在

service中或者後台執行緒中,庫**會自動識別出它所執行的context。它的feature包括:

1. 傳送非同步http請求,在匿名callback物件中處理response;

2. http請求發生在ui執行緒之外;

3. 內部採用執行緒池來處理併發請求;

4. get/post 引數構造,通過requestparams類。

5. 內建多部分檔案上傳,不需要第三方庫支援;

6. 流式json上傳,不需要額外的庫;

7. 能處理環行和相對重定向;

9. 自動智慧型的請求重試機制在各種各樣的移動連線環境中;

10. 自動的gzip響應解碼;

11. 內建多種形式的響應解析,有原生的位元組流,string,json物件,甚至可以將response寫到檔案中;

12. 永久的cookie儲存,內部實現用的是android的sharedpreferences;

13. 通過basejsonhttpresponsehandler和各種json庫整合;

14. 支援sax解析器;

15. 支援各種語言和content編碼,不僅僅是utf-8。

接下來,帶領大家看看應用android-async-http來寫**是個啥樣子。簡單來說你只需要3步,

1. 建立乙個asynchttpclient;

2. (可選的)通過requestparams物件設定請求引數;

3. 呼叫asynchttpclient的某個get方法,傳遞你需要的(成功和失敗時)callback介面實現,一般都是匿名內部類

,實現了asynchttpresponsehandler,類庫自己也提供了好些現成的response handler,你一般不需要自己建立乙個。

來看看**如何寫:

});匿名內部類的方式實現asynchttpresponsehandler,而且更棒的是你只需要override感興趣的方法,比如一般都是onsuccess和onfailure。

這個版本的get方法沒有為請求傳遞任何引數,當然你也可以通過requestparams來傳遞各種引數,如下:

以上的例子是返回的response直接是原生位元組流的情況,如果你需要把返回的結果當乙個string對待,這時只需要匿名實現乙個

texthttpresponsehandler就行,其繼承自asynchttpresponse,並將原生的位元組流根據指定的encoding轉化成了string物件,

**如下:

同樣的方式,你可以傳送json請求,**如下:

看到了沒,返回的response已經自動轉化成jsonobject了,當然也支援jsonarray型別,override你需要的那個版本就行。

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...