【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient 實戰(zhàn)總結(jié)及思考_第1頁
【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient 實戰(zhàn)總結(jié)及思考_第2頁
【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient 實戰(zhàn)總結(jié)及思考_第3頁
【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient 實戰(zhàn)總結(jié)及思考_第4頁
【移動應(yīng)用開發(fā)技術(shù)】AsyncHttpClient 實戰(zhàn)總結(jié)及思考_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論