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