真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

AsyncHttpClient實(shí)戰(zhàn)總結(jié)及思考-創(chuàng)新互聯(lián)

第一次參加工作時(shí)使用的網(wǎng)絡(luò)框架是AsyncHttpClient,雖說(shuō)該框架使用非常簡(jiǎn)潔,但是使用的過(guò)程同時(shí)也是初學(xué)者成長(zhǎng)與思考的過(guò)程。在項(xiàng)目的不同階段,重新查閱網(wǎng)絡(luò)請(qǐng)求的代碼,總能想到一些優(yōu)化的方法,或大或小。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),浠水網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:浠水等地區(qū)。浠水做網(wǎng)站價(jià)格咨詢:18982081108

github:https://github.com/loopj/android-async-http

官網(wǎng):http://loopj.com/android-async-http/

使用步驟:

1、創(chuàng)建一個(gè)AsyncHttpClient對(duì)象

2、創(chuàng)建RequestParams對(duì)象并設(shè)置請(qǐng)求參數(shù)(可選)

3、調(diào)用AsyncHttpClient的get或post方法,并傳入AsyncHttpResponseHandler接口的實(shí)現(xiàn)對(duì)象,用于處理請(qǐng)求返回。一般匿名內(nèi)部類(lèi)即可。

使用方法:

compile 'com.loopj.android:android-async-http:1.4.9'

自2015年更新1.4.9版本,支持android6.0移除HttpClient帶來(lái)的問(wèn)題后便沒(méi)有后續(xù)更新,現(xiàn)在更火的是OkHttp。

關(guān)鍵類(lèi)

AsyncHttpResponseHandler:其余三個(gè)的基類(lèi),返回子節(jié)數(shù)組,實(shí)現(xiàn)ResponseHandlerInterface

TextHttpResponseHandler:返回字符串

JsonHttpResponseHandler:返回JSONObject或JSONArray或String

BaseJsonHttpResponseHandler:返回傳入的實(shí)體類(lèi)對(duì)象

創(chuàng)建一個(gè)AsyncHttpClient對(duì)象

AsyncHttpClient asyncHttpClient = newAsyncHttpClient();

AsyncHttpResponseHandler

asyncHttpClient.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) {
    }
});

 通常重寫(xiě)onSuccess和onFailure分別對(duì)應(yīng)成功、失敗的處理代碼。也可以重寫(xiě)onStart和onFinish處理啟動(dòng)和結(jié)束的邏輯,一般我用來(lái)顯示和隱藏加載對(duì)話框

TextHttpResponseHandler

一開(kāi)始不知道有這么一個(gè)類(lèi),每次都手動(dòng)將byte[]轉(zhuǎn)String,這個(gè)比較常用。

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對(duì)象,這個(gè)類(lèi)相比其他幾個(gè)稍微復(fù)雜,首先需要你自己選擇重寫(xiě)的父類(lèi)方法,其次提供了三種重載的方法供你重寫(xiě)。

onSuccess/onFailure(...JSONArray)

onSuccess/onFailure(...JSONObject)

onSuccess/onFailure(...String)

 查閱源碼可知:JsonHRH會(huì)根據(jù)不同的解析結(jié)果調(diào)用不同的onSuccess/onFailure。所以使用這個(gè)類(lèi),你只需要知道服務(wù)器返回的數(shù)據(jù)格式,并重寫(xiě)合適的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對(duì)象,對(duì)于需要轉(zhuǎn)換成Java對(duì)象的需求來(lái)說(shuō),這里還需要自己做一個(gè)轉(zhuǎn)換Java對(duì)象的操作。這里不太方便,不如直接使用BaseJSONHttpResponseHandler。

BaseJsonHttpResponseHandler

 BaseJSONHttpResponseHandler是一個(gè)泛型類(lèi),類(lèi)型參數(shù)是你要反序列化的JavaBean。也是用于直接返回Json對(duì)象,不同于JsonHRH的是你需要重寫(xiě)parseResponse方法,自己完成Json的反序列化。方便你使用Gson、Jackson Json等第三方框架。

asyncHttpClient.get(url, new BaseJsonHttpResponseHandler() {
    @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是一個(gè)實(shí)體類(lèi),自帶一個(gè)parse方法能將String反序列化程Update對(duì)象。在parseResponse中返回解析完成的Java對(duì)象,然后在onSuccess中就可以獲得對(duì)應(yīng)的Java對(duì)象。個(gè)人認(rèn)為比JsonHRH來(lái)得好用,這里將Json轉(zhuǎn)換Java對(duì)象的邏輯放在parseResponse方法里,代碼邏輯更清晰。

在實(shí)戰(zhàn)中進(jìn)步:

在請(qǐng)求服務(wù)器,解析Json數(shù)據(jù)這條路上經(jīng)歷了這三個(gè)階段:

階段一:只使用AsyncHttpResponseHandler

每次都手動(dòng)將byte[]轉(zhuǎn)String,然后新增一個(gè)類(lèi)JsonUtil用于將String轉(zhuǎn)換成Java對(duì)象,代碼非常的臃腫。

階段二:使用TextHttpResponseHandler

省去了byte[]轉(zhuǎn)String的過(guò)程。但是依然需要JsonUtil來(lái)轉(zhuǎn)換Java對(duì)象

階段三:使用BaseJsonHttpResponseHandler。

將轉(zhuǎn)換過(guò)程放在每一個(gè)JavaBean類(lèi)中。代碼可以更簡(jiǎn)潔易懂。

同樣對(duì)于json解析,以前的做法是:

1、新增一個(gè)JavaBean

2、在JsonUtil中新增一個(gè)getJavaBean()的方法用于反序列化(使用Gson)

 由于Gson在使用過(guò)程中使用泛型遇到“類(lèi)型擦除”的問(wèn)題,找不到解決方法。對(duì)于每一個(gè)JavaBean都需要新增一個(gè)getJavaBean的方法來(lái)解析出對(duì)應(yīng)的JavaBean,顯得代碼很臃腫。

解決方法:

方法1、在每一個(gè)JavaBean中增加一個(gè)parse的方法用于解析Json,解析方法與實(shí)體類(lèi)綁定。

方法2、使用BaseJsonHttpResponseHandler,將解析過(guò)程與業(yè)務(wù)邏輯分離。

 在新手階段,對(duì)于網(wǎng)絡(luò)上推薦的第三方框架,遵循拿來(lái)就用的原則,并沒(méi)有進(jìn)行過(guò)多的學(xué)習(xí)。這樣使用效果非常差,對(duì)于實(shí)現(xiàn)原理的不理解,沒(méi)有閱讀過(guò)源代碼,使用起來(lái)也是流于形式。多多了解其實(shí)現(xiàn)原理,才能夠得心應(yīng)手。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


本文標(biāo)題:AsyncHttpClient實(shí)戰(zhàn)總結(jié)及思考-創(chuàng)新互聯(lián)
當(dāng)前URL:http://weahome.cn/article/dhjdec.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部