日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android网络请求回调管理,Android HTTP网络请求的异步实现

發布時間:2025/4/5 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android网络请求回调管理,Android HTTP网络请求的异步实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

大家都知道網絡操作的響應時間是不定的,所有的網絡操作都應該放在一個異步操作中處理,而且為了模塊解耦,我們希望網絡操作由專門的類來處理。所有網絡數據發送,數據接收都有某幾個類來實現,外部其它模塊只要調用和處理回調函數即可。外部模塊和網絡模塊之間的調用關系可以用如下圖表示:

調用端只要創建Request對象,設置參數,發起請求,即可。最后結果通過回調函數返回。右邊的異步任務,HttpClient創建,參數解析,錯誤處理全部交給網絡處理模塊來完成。由此來看,這個網絡模塊其實是重復性很高的開發工作,為了避免重復造輪子,下面就給大家介紹下我們工作中實現的網絡操作模塊及相應類的實現。

1.調用端代碼:

Get或Post請求

protected void doWebTest()

{

String url = "http://www.target.com/abcd";

try {

MyHttpRequest http = new MyHttpRequest(url);

//如果是Post請求,則設置.如果是get請求,請不要設置post參數

//http.addPost("data", "testpostvalue");

//post參數結束,get請求,不要添加上面addPost代碼

http.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");

http.addHeader("Accept-Encoding", "gzip, deflate, sdch");

http.addHeader("Accept-Language","zh-CN,zh;q=0.8");

http.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36");

http.StartRequest(new INetResponseListener() {

@Override

public void OnRequestComplete(NetResponse result) {

if(result.isSuccess())

{

String resultStr = result.resultStr;

//resultStr就是網絡返回的數據

}else

{

Exception ee = result.getException();

}

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

以上是調用端需要實現的源碼,是不是很少代碼就可以完成網絡請求?下面就為大家揭開這個網絡處理類的面紗。

2.主要類介紹?1.AbstractRequester:一個抽象的網絡請求類

2.MyHttpRequest::實例化的網絡請求類。如果開發者有其它特殊處理需求,可以繼承AbstractRequester 自己重新實現parseResponse

3.HttpEngine:HttpClient網絡引擎類,最終的網絡請求由這個類處理

4.HttpRequestData:傳遞給AsyncTask的參數類

5.NetResponse:返回給調用者的響應類

6.INetResponseListener:異步回調的interface

類之間的關系如下圖所示:

2.1 AbstractRequester抽象的網絡管理類,類定義如下:

public abstract class AbstractRequester extends AsyncTask {

...

/**

* 根據需求創建傳遞給http發送的參數

* @return

*/

abstract HttpRequestData createData();

/**

* 根據返回的流,解析生成相應的對象

* @param in

* @return

*/

abstract NetResponse parseResponse(InputStream in);

//執行完成后的回調函數

protected void onPostExecute(NetResponse result) {

super.onPostExecute(result);

if(listener!=null)

{

listener.OnRequestComplete(result);

}

}

//網絡請求開始處理

protected NetResponse doInBackground(HttpRequestData... reqArgs) {

//因內容比較多。具體查看源碼

}

public void StartRequest(INetResponseListener aListener){

//具體查看源碼

}

}

對于一些有其它特殊需求的開發者,只需要繼承這個類,并實現它的抽象接口,如果是通用需求,則可以直接使用下面的MyHttpRequest類:

abstract HttpRequestData createData();

abstract NetResponse parseResponse(InputStream in);

2.2 MyHttpRequest

繼承并實現了AbstractRequester的網絡處理類,支持Get和Post類型,支持自定義添加headers參數。

對于普通的網絡請求和返回已經夠用,開發者可以直接使用。

2.3 HttpEngine網絡請求引擎類。主要流程如下:

1.創建createHttpClient

2.判斷參數有效性

3.判斷get或post

4.創建對應的HttpGet或HttpPost

5.設置各類參數

6.調用httpClient.execute執行網絡請求

7.解析和判斷網絡返回結果

8.生成Stream對象并返回

2.4 HttpRequestData

傳遞給AsyncTask的參數類,用于設置http請求的各類參數。

2.5 NetResponse返回給調用者的類對象,包括狀態、數據和異常。

2.6 INetResponseListener定義很簡單,源碼如下:

public interface INetResponseListener {

/**

* 網絡請求返回

* @param result

*/

public void OnRequestComplete(NetResponse result);

}

調用者只要實現這個interface,異步接收返回結果即可,返回結果就是NetResponse對象。

- 常見問題

1. AsyncTask說明?大家都知道AsyncTask是異步的,所以網絡請求通過AsyncTask來實現,通過AyncTask的好處是輕量級異步,而且可以操作ui線程,比如更新進度條等。但AsyncTask也存在以下一些問題:

?task需要在ui線程中創建和啟用,所以AbstractRequester 對象的創建和調用StartRequest請在ui線程中完成

?API 11也就是3.0以后,AsyncTask是排隊執行,所以如果其中一個任務出現較耗時,其它網絡請求需要等待;如果你想同步執行,要修改execute為executeOnExecutor(但不推薦做這個修改)

2. 權限在xml中添加網絡操作權限:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的android网络请求回调管理,Android HTTP网络请求的异步实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本一区二区三区精品 | 国产一级在线免费观看 | 美女羞羞动态图 | 亚洲黄色在线免费观看 | 免费国产一区 | 国产刺激高潮av | 天天摸天天做天天爽水多 | 精品综合久久久 | 黑人一区二区三区 | 色综合999| 国产一区二区三区高清 | h片在线免费 | www.999热 | 婷婷网址| 日本特级黄色 | 黄色片中文字幕 | 久久香视频 | av老司机福利 | 久热av在线| 99毛片 | 人妻互换一区二区三区四区五区 | 日韩一二三四区 | 毛片88 | 日韩电影中文字幕在线观看 | 中文字幕第5页 | 久久精品欧美日韩 | 日本国产高清 | 国产精品成人免费精品自在线观看 | 精品少妇一区二区三区免费观看 | 精品福利电影 | 国产精品99久久久久久www | 精品国产av无码 | 天海翼av在线 | 久久综合婷婷国产二区高清 | 成人久久免费 | 一级黄色片毛片 | 韩国av电影在线观看 | 欧美资源在线 | 超碰狠狠| 日日夜夜精品免费视频 | 欧美天天搞 | 人人操日日干 | 欧美整片在线观看 | av黄在线| 秋霞av鲁丝片一区二区 | 成人a视频 | 亚洲天堂资源 | 黄片毛片在线免费观看 | 国产精品极品白嫩 | 青苹果av| 激情在线观看视频 | 欧美gv在线观看 | 亚洲第一成人在线 | 美女免费视频网站 | 日韩欧美123| 国产亚洲精久久久久久无码苍井空 | 嫩草av91| 欲色视频 | aa片在线观看视频在线播放 | 日韩激情 | 欧美与黑人午夜性猛交久久久 | 欧美日韩一区二区在线视频 | 看一级黄色片 | 猛1被调教成公厕尿便失禁网站 | 污片在线免费观看 | 国产精品久久综合视频 | 高清一区二区三区视频 | 免费视频中文字幕 | www.欧美亚洲 | 国产精品99精品 | 久久久久国色av免费观看性色 | 亚洲自拍偷拍精品视频 | 久久夜夜操妹子 | 欧美性生活网站 | 天天做夜夜做 | 亚洲黄色在线网站 | 亚洲激情黄色 | 狂野欧美性猛交xxⅹ李丽珍 | 在线免费观看av网 | 一本久道在线 | 日韩av毛片在线观看 | 日韩一区二区三区三四区视频在线观看 | 在线播放精品视频 | 琪琪色av | 欧美日韩操 | 蜜桃视频久久一区免费观看入口 | 中文字幕人成人乱码亚洲电影 | 日韩黄色精品视频 | 蜜桃精品久久久久久久免费影院 | 欧美一级片免费在线观看 | 亚洲无限码 | www在线观看国产 | 香蕉网站在线 | www.精品一区 | 成年人免费黄色片 | 2017天天干| 黄色a一片 | 福利亚洲| 欧美另类极品videosbest最新版本 |