




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術(shù)】AsyncHttpClient實戰(zhàn)總結(jié)及思考
第一次參加工作時使用的網(wǎng)絡框架是AsyncHttpClient,雖說該框架使用非常簡潔,但是使用的過程同時也是初學者成長與思考的過程。在項目的不同階段,重新查閱網(wǎng)絡請求的代碼,總能想到一些優(yōu)化的方法,或大或小。
github:/loopj/android-async-http官網(wǎng):/android-async-http/
使用步驟:1、創(chuàng)建一個AsyncHttpClient對象2、創(chuàng)建RequestParams對象并設置請求參數(shù)(可選)3、調(diào)用AsyncHttpClient的get或post方法,并傳入AsyncHttpResponseHandler接口的實現(xiàn)對象,用于處理請求返回。一般匿名內(nèi)部類即可。
使用方法:compile'com.loopj.android:android-async-http:1.4.9'自2015年更新1.4.9版本,支持android6.0移除HttpClient帶來的問題后便沒有后續(xù)更新,現(xiàn)在更火的是OkHttp。
關鍵類AsyncHttpResponseHandler:其余三個的基類,返回子節(jié)數(shù)組,實現(xiàn)ResponseHandlerInterfaceTextHttpResponseHandler:返回字符串JsonHttpResponseHandler:返回JSONObject或JSONArray或StringBaseJsonHttpResponseHandler:返回傳入的實體類對象
創(chuàng)建一個AsyncHttpClient對象AsyncHttpClientasyncHttpClient=newAsyncHttpClient();
AsyncHttpResponseHandlerasyncHttpClient.post(url,
new
AsyncHttpResponseHandler()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
byte[]
responseBody)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
byte[]
responseBody,
Throwable
error)
{
}
});
通常重寫onSuccess和onFailure分別對應成功、失敗的處理代碼。也可以重寫onStart和onFinish處理啟動和結(jié)束的邏輯,一般我用來顯示和隱藏加載對話框
TextHttpResponseHandler一開始不知道有這么一個類,每次都手動將byte[]轉(zhuǎn)String,這個比較常用。asyncHttpClient.get(url,
newTextHttpResponseHandler()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
responseString)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
String
responseString,
Throwable
throwable)
{
}
});JsonHttpResponseHandler
用于直接返回Json對象,這個類相比其他幾個稍微復雜,首先需要你自己選擇重寫的父類方法,其次提供了三種重載的方法供你重寫。onSuccess/onFailure(...JSONArray)onSuccess/onFailure(...JSONObject)onSuccess/onFailure(...String)
查閱源碼可知:JsonHRH會根據(jù)不同的解析結(jié)果調(diào)用不同的onSuccess/onFailure。所以使用這個類,你只需要知道服務器返回的數(shù)據(jù)格式,并重寫合適的onSuccess/onFailure即可。asyncHttpClient.get(url,
new
JsonHttpResponseHandler(){
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
JSONArray
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
JSONArray
errorResponse)
{
}
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
JSONObject
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
JSONObject
errorResponse)
{
}
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
responseString)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
String
responseString,
Throwable
throwable)
{
}
@Override
public
void
onRetry(int
retryNo)
{
}
});
備注:這里返回的是JSONObject或JSONArray對象,對于需要轉(zhuǎn)換成Java對象的需求來說,這里還需要自己做一個轉(zhuǎn)換Java對象的操作。這里不太方便,不如直接使用BaseJSONHttpResponseHandler。
BaseJsonHttpResponseHandler<JSON_TYPE>
BaseJSONHttpResponseHandler是一個泛型類,類型參數(shù)是你要反序列化的JavaBean。也是用于直接返回Json對象,不同于JsonHRH的是你需要重寫parseResponse方法,自己完成Json的反序列化。方便你使用Gson、JacksonJson等第三方框架。asyncHttpClient.get(url,
new
BaseJsonHttpResponseHandler<Update>()
{
@Override
public
void
onSuccess(int
statusCode,
Header[]
headers,
String
rawJsonResponse,
Update
response)
{
}
@Override
public
void
onFailure(int
statusCode,
Header[]
headers,
Throwable
throwable,
String
rawJsonData,
Update
errorResponse)
{
}
@Override
protected
Update
parseResponse(String
rawJsonData,
boolean
isFailure)
throws
Throwable
{
return
Update.parse(rawJsonData);//自己完成反序列化
}
});
這里的Update是一個實體類,自帶一個parse方法能將String反序列化程Update對象。在parseResponse中返回解析完成的Java對象,然后在onSuccess中就可以獲得對應的Java對象。個人認為比JsonHRH來得好用,這里將Json轉(zhuǎn)換Java對象的邏輯放在parseResponse方法里,代碼邏輯更清晰。
在實戰(zhàn)中進步:在請求服務器,解析Json數(shù)據(jù)這條路上經(jīng)歷了這三個階段:階段一:只使用AsyncHttpResponseHandler每次都手動將byte[]轉(zhuǎn)String,然后新增一個類JsonUtil用于將String轉(zhuǎn)換成Java對象,代碼非常的臃腫。階段二:使用TextHttpResponseHandler省去了byte[]轉(zhuǎn)String的過程。但是依然需要JsonUtil來轉(zhuǎn)換Java對象階段三:使用BaseJsonHttpResponseHandler。將轉(zhuǎn)換過程放在每一個JavaBean類中。代碼可以更簡潔易懂。
同樣對于json解析,以前的做法是:1、新增一個JavaBean2、在JsonUtil中新增一個getJavaBean()的方法用于反序列化(使用Gson)
由于Gson在使用過程中使用泛型遇到“類型擦除”的問題,找不到解決方法。對于每一個JavaBean都需要新增一個getJavaBean的方法來解析出對應的JavaBean,顯得代碼很臃
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老舊供水管道更新項目可行性研究報告(范文)
- 《悲慘世界》讀書心得15篇
- 健康險領域拓寬空間的戰(zhàn)略與實施
- 建材物流園工程實施方案(參考模板)
- 貴重金屬循環(huán)利用項目規(guī)劃設計方案
- 光伏組件生產(chǎn)線項目可行性研究報告(參考范文)
- 河南省新高中創(chuàng)新聯(lián)盟TOP二十名校計劃2023-2024學年高三上學期11月調(diào)研數(shù)學含解析
- 成都工業(yè)職業(yè)技術(shù)學院《電路課程設計》2023-2024學年第二學期期末試卷
- 上海電子信息職業(yè)技術(shù)學院《組織行為與人際技巧》2023-2024學年第二學期期末試卷
- 遼寧工程職業(yè)學院《生產(chǎn)制造執(zhí)行系統(tǒng)》2023-2024學年第二學期期末試卷
- 美團代運營合同協(xié)議模板
- 2025屆貴州省遵義第四中學高考全國統(tǒng)考預測密卷英語試卷含解析
- 2025年北京市豐臺區(qū)九年級初三一模物理試卷(含答案)
- 中醫(yī)內(nèi)科學胸痹課件
- 2025廣西廣投臨港工業(yè)有限公司社會招聘45人筆試參考題庫附帶答案詳解
- 銅川易源電力實業(yè)有限責任公司招聘筆試真題2024
- 工業(yè)用氣體租賃合同協(xié)議
- 2024年北京高考化學試卷知識點分布
- 2025-2030中國橋塞行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025年山東省應急管理普法知識競賽參考試題庫500題(含答案)
- 小超市加股東合同協(xié)議
評論
0/150
提交評論