




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient實戰(zhàn)總結(jié)及思考
第一次參加工作時使用的網(wǎng)絡(luò)框架是AsyncHttpClient,雖說該框架使用非常簡潔,但是使用的過程同時也是初學(xué)者成長與思考的過程。在項目的不同階段,重新查閱網(wǎng)絡(luò)請求的代碼,總能想到一些優(yōu)化的方法,或大或小。
github:/loopj/android-async-http官網(wǎng):/android-async-http/
使用步驟:1、創(chuàng)建一個AsyncHttpClient對象2、創(chuàng)建RequestParams對象并設(shè)置請求參數(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。
關(guān)鍵類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分別對應(yīng)成功、失敗的處理代碼。也可以重寫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對象,這個類相比其他幾個稍微復(fù)雜,首先需要你自己選擇重寫的父類方法,其次提供了三種重載的方法供你重寫。onSuccess/onFailure(...JSONArray)onSuccess/onFailure(...JSONObject)onSuccess/onFailure(...String)
查閱源碼可知:JsonHRH會根據(jù)不同的解析結(jié)果調(diào)用不同的onSuccess/onFailure。所以使用這個類,你只需要知道服務(wù)器返回的數(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中就可以獲得對應(yīng)的Java對象。個人認(rèn)為比JsonHRH來得好用,這里將Json轉(zhuǎn)換Java對象的邏輯放在parseResponse方法里,代碼邏輯更清晰。
在實戰(zhàn)中進步:在請求服務(wù)器,解析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的方法來解析出對應(yīng)的JavaBean,顯得代碼很臃
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃經(jīng)營合同
- 工業(yè)廢水處理技術(shù)研發(fā)合作合同
- 井蓋產(chǎn)品購銷合同
- 汽車直租融資租賃合同
- 房地產(chǎn)測量合同年
- 會議展覽活動承辦服務(wù)合同
- 房屋修建承包合同
- 合作研究開發(fā)合同
- 1秋天 教學(xué)設(shè)計-2024-2025學(xué)年語文一年級上冊統(tǒng)編版
- 長沙電力職業(yè)技術(shù)學(xué)院《創(chuàng)意教學(xué)法》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024年湖北省武漢市中考語文試卷
- 二零二五年度高品質(zhì)小區(qū)瀝青路面翻新施工與道路綠化合同2篇
- 2024年形勢與政策復(fù)習(xí)題庫含答案(綜合題)
- 2022年北京市初三一模語文試題匯編:基礎(chǔ)知識綜合
- 2025年廣東食品藥品職業(yè)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 2 爆破工試題及答案
- 電路基礎(chǔ)知到智慧樹章節(jié)測試課后答案2024年秋江西職業(yè)技術(shù)大學(xué)
- 盲源信號分離算法研究及應(yīng)用
- 工程項目部安全生產(chǎn)治本攻堅三年行動實施方案
- 2024三農(nóng)新政策解讀
- HGE系列電梯安裝調(diào)試手冊(ELS05系統(tǒng)SW00004269,A.4 )
評論
0/150
提交評論