国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

安卓客戶端與WEB服務(wù)器數(shù)據(jù)傳輸方案的實(shí)現(xiàn)

2016-06-27 02:08:14
關(guān)鍵詞:荊楚安卓列表

李 冉

(荊楚理工學(xué)院 計(jì)算機(jī)工程學(xué)院, 湖北 荊門 448000)

安卓客戶端與WEB服務(wù)器數(shù)據(jù)傳輸方案的實(shí)現(xiàn)

李冉

(荊楚理工學(xué)院 計(jì)算機(jī)工程學(xué)院, 湖北 荊門 448000)

摘要:安卓客戶端與Web服務(wù)器之間的數(shù)據(jù)傳輸,是安卓應(yīng)用開發(fā)的關(guān)鍵技術(shù)之一,也是安卓應(yīng)用性能的瓶頸。筆者深入研究了各種數(shù)據(jù)傳輸方式和現(xiàn)有工具,設(shè)計(jì)了一套通用的傳輸方案,對方案中通用的構(gòu)件進(jìn)行了封裝。經(jīng)過實(shí)際的開發(fā)應(yīng)用顯示,該方案可復(fù)制性好,開發(fā)效率高,具有實(shí)用價(jià)值。

關(guān)鍵詞:數(shù)據(jù)傳輸;Android; App;HttpURLConnection

近年來,隨著4G時(shí)代的開啟以及智能移動(dòng)終端設(shè)備的平民化,移動(dòng)互聯(lián)網(wǎng)的發(fā)展日新月異?;诨ヂ?lián)網(wǎng)的各類應(yīng)用也不斷地向移動(dòng)互聯(lián)網(wǎng)延伸,APP的下載與安裝成為每一部智能手機(jī)必備的功能。絕大部分APP不是一個(gè)孤立的移動(dòng)互聯(lián)網(wǎng)應(yīng)用,都由服務(wù)器提供數(shù)據(jù)服務(wù)、計(jì)算服務(wù)或資源服務(wù),而服務(wù)器采用Web服務(wù)器居多,它具有開發(fā)簡單、易于維護(hù)的優(yōu)點(diǎn)。因此,APP與服務(wù)器的數(shù)據(jù)通信是移動(dòng)互聯(lián)網(wǎng)應(yīng)用的關(guān)鍵技術(shù)之一。

Android是一種基于Linux、開源的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,由Google和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)開發(fā)[1]。由于Android的開源特性,市場份額飛速增長,據(jù)IDC數(shù)據(jù)顯示,截至2014年,Android用戶達(dá)到81.5%,遙遙領(lǐng)先于IOS和WP。

本文主要研究基于Android的APP與WEB服務(wù)器之間的數(shù)據(jù)通信技術(shù),設(shè)計(jì)并實(shí)現(xiàn)一個(gè)通用的數(shù)據(jù)傳輸方案,可應(yīng)用于大部分移動(dòng)互聯(lián)網(wǎng)應(yīng)用的開發(fā)實(shí)踐,以屏蔽數(shù)據(jù)傳輸技術(shù)細(xì)節(jié),提高開發(fā)效率。

1安卓客戶端與Web服務(wù)器數(shù)據(jù)傳輸技術(shù)

安卓客戶端與Web服務(wù)器數(shù)據(jù)傳輸主要有兩種類型:一種基于Socket,另一種基于HTTP。Socket可以實(shí)現(xiàn)客戶端與服務(wù)器的通信,但是偏底層,難度大,數(shù)據(jù)的讀寫較麻煩,一般不直接使用。HTTP 協(xié)議是現(xiàn)在互聯(lián)網(wǎng)上使用最多、最重要的協(xié)議,很多應(yīng)用程序直接通過 HTTP 協(xié)議獲取網(wǎng)絡(luò)資源和數(shù)據(jù)通信。基于Http的安卓客戶端與Web服務(wù)器數(shù)據(jù)傳輸組件主要有兩個(gè),即HttpClient與HttpURLConnection。

1.1HttpClient

HttpClient是 Apache Jakarta Common旗下的一個(gè)開源項(xiàng)目,它是一個(gè)基于HTTP協(xié)議的客戶端編程工具庫,提供功能豐富的支持 HTTP 的工具類,并且版本在不斷更新[2]。

1.2HttpURLConnection

HttpURLConnection是一種輕量級(jí)的HTTP客戶端工具類,可適用于大多數(shù)的應(yīng)用程序[3]。雖然它的API比較簡單,但是人們可以更容易地使用和擴(kuò)展它。

1.3兩者比較

HttpURLConnection是安卓平臺(tái)的標(biāo)準(zhǔn)實(shí)現(xiàn),支持系統(tǒng)級(jí)連接池,打開的連接在一段時(shí)間內(nèi)所有程序可共用,直接在系統(tǒng)層實(shí)現(xiàn)緩存策略處理,加快了重復(fù)請求的速度。而HttpClient是一個(gè)增強(qiáng)版的HttpURLConnection,HttpURLConnection可以做的事情它全部可以做;但由于HttpClient的API體系較大,很難在滿足向上兼容的情況下進(jìn)行升級(jí)和擴(kuò)展。因此,目前安卓團(tuán)隊(duì)對提升和優(yōu)化HttpClient組件的工作態(tài)度并不積極。

2通用的數(shù)據(jù)傳輸方案

根據(jù)對HttpClient和HttpURLConnection的分析研究,本文采用HttpURLConnection組件設(shè)計(jì)一套通用的數(shù)據(jù)傳輸方案,并將方案中共性的功能模塊封裝成通用的工具,實(shí)現(xiàn)安卓客戶端與Web服務(wù)器之間傳輸各類數(shù)據(jù)的功能。傳輸方案的總體框架如圖1所示。

圖1 通用傳輸方案框架圖

對于通用傳輸方案框架的說明如下:

(1)該方案框架中,客戶端與服務(wù)器之間所有的數(shù)據(jù)交換都是以對象流的形式實(shí)現(xiàn)。

(2)通用連接器屬于固定的功能模塊,由HttpURLConnection封裝實(shí)現(xiàn)。

(3)Web服務(wù)器只開通一個(gè)數(shù)據(jù)服務(wù)接口,這樣客戶端便于維護(hù)服務(wù)器的地址。

(4)所有的命令字構(gòu)成命令字集合,相當(dāng)于數(shù)據(jù)請求協(xié)議,用于各類請求的區(qū)分。

(5)對于Android客戶端的某一數(shù)據(jù)請求,首先調(diào)用通用連接器實(shí)例,通過sendRequest()方法向服務(wù)器唯一的數(shù)據(jù)接口發(fā)送http請求。請求中所有的參數(shù)(包括命令字),通過對象輸出流一起提交。服務(wù)器端數(shù)據(jù)服務(wù)接口收到請求后,調(diào)用請求分發(fā)器進(jìn)行業(yè)務(wù)分發(fā),最后將數(shù)據(jù)結(jié)果通過對象輸出流返回到客戶端。

3功能模塊的封裝

3.1通用連接器的封裝

客戶端通用連接器類Connector由HttpURLConnection組件進(jìn)一步封裝來實(shí)現(xiàn)。為了實(shí)現(xiàn)連接器中請求發(fā)送方法的通用性,所有的參數(shù)(包括命令字),都以對象流的方式向服務(wù)器提交。連接器中的異常一律拋出,客戶端在表示層中才進(jìn)行捕獲,便于頁面的跳轉(zhuǎn)控制。主要代碼如下:

public class Connector {

private static String urlPath; //web服務(wù)器數(shù)據(jù)請求地址

private HttpURLConnection conn;

public Connector() throws IOException{

urlPath = “…”;

initConnection(); }

//數(shù)據(jù)請求發(fā)送方法,返回結(jié)果數(shù)據(jù)對象輸入流

public ObjectInputStream sendRequest(String cmdKey,Object[] data) throws Exception{

OutputStream os = conn.getOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(os);

oos.writeObject(new String(cmdKey));

for(int i=0; data!=null && i

建立科學(xué)合理的審計(jì)質(zhì)量評(píng)價(jià)機(jī)制,首先要從制度上給予質(zhì)量評(píng)價(jià)相應(yīng)的依據(jù)。目前我國在這一方面才剛剛起步,許多事物尚且停留在總括式概念的程度。因此金融監(jiān)管部門應(yīng)當(dāng)在基于本國國情的基礎(chǔ)上借鑒外來經(jīng)驗(yàn),建立起一套適應(yīng)我國國情的審計(jì)質(zhì)量評(píng)價(jià)機(jī)制。加強(qiáng)質(zhì)量評(píng)價(jià)隊(duì)伍建設(shè),培養(yǎng)高素質(zhì)的審計(jì)質(zhì)量評(píng)價(jià)專業(yè)人士,提高質(zhì)量評(píng)價(jià)隊(duì)伍的準(zhǔn)入門檻,堅(jiān)持擇優(yōu)錄取的同時(shí)也要合理配置人才資源,做到人盡其才。

oos.writeObject(data[i]); }

oos.flush(); oos.close();

InputStream is= conn.getInputStream();

ObjectInputStream ois = new ObjectInputStream(is);

return ois;

}

private void initConnection() throws IOException{

URL url = new URL(urlPath);

conn.setDoOutput(true); conn.setDoInput(true);

conn.setRequestProperty(“Content-type”, “application/x-java-serialized-object”);

conn.setRequestMethod(“POST”); //使用post請求方法

}

}

3.2服務(wù)器數(shù)據(jù)接口的封裝

在Web服務(wù)器中采用Servlet來實(shí)現(xiàn)請求監(jiān)聽,整個(gè)服務(wù)器只創(chuàng)建一個(gè)數(shù)據(jù)接口Servlet,封裝為EntranceServlet類[4-5]。在doPost方法中,通過request和response對象分別獲取對象輸入流ois和對象輸出流oos,然后調(diào)用請求分發(fā)器進(jìn)行請求分發(fā)[6-7]。主要代碼如下:

public class EntranceServlet extends HttpServlet {

……

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws Exception {

try {

ObjectInputStream ois=new ObjectInputStream(req.getInputStream());

ObjectOutputStream oos=new ObjectOutputStream(resp.getOutputStream());

SyncDispatcher.dispatch(ois, oos); //請求分發(fā)器進(jìn)行請求分發(fā)

} catch (Exception e) {

…… }

}

}

3.3服務(wù)器請求分發(fā)器的封裝

在服務(wù)器中,請求分發(fā)器是一個(gè)相對固定的工具類,類中dispatch()方法的實(shí)現(xiàn)一般根據(jù)具體的業(yè)務(wù)進(jìn)行擴(kuò)展[8]。本方案中所有命令字在CommandKey類中,以常量的形式存儲(chǔ)。主要代碼如下:

public class SyncDispatcher {

public static void dispatch(ObjectInputStream ois,ObjectOutputStream oos){

String cmdKey= (String)(ois.readObject()); //輸入流的第一個(gè)對象即為命令字

if(CommandKey.NET_TEST.equals(cmdKey)){ //如果是測試命令字

test(ois,oos);

}else if(CommandKey.KEY2.equals(cmdKey)){

… //調(diào)用服務(wù)器中相應(yīng)的服務(wù)業(yè)務(wù)類實(shí)現(xiàn)數(shù)據(jù)請求服務(wù)

}else if( … ) …

ois.close();oos.flush();oos.close();

}

}

4實(shí)際應(yīng)用案例

本文以荊楚校園通新聞列表的獲取為例,簡略展示該方案的實(shí)際應(yīng)用。荊楚校園通是一個(gè)由APP客戶端和后臺(tái)管理端構(gòu)成的信息服務(wù)系統(tǒng),客戶端采用Android的原生API進(jìn)行開發(fā)。在APP中,所有與后臺(tái)管理端的數(shù)據(jù)通信均采用本文所設(shè)計(jì)的傳輸方案,可以方便地傳輸文字、圖片、文件等各類數(shù)據(jù),系統(tǒng)開發(fā)效率高,總體運(yùn)行速度快,性能穩(wěn)定。

荊楚校園通新聞列表動(dòng)態(tài)地從后臺(tái)獲取,包括新聞標(biāo)題、簡介、封面圖片等屬性,獲取的流程如圖2所示。

圖2 數(shù)據(jù)獲取流程

圖2中,NewsGetter是客戶端負(fù)責(zé)獲取新聞列表的一個(gè)封裝類。在這個(gè)類中,另外創(chuàng)建一個(gè)線程,使用通用連接器Connector連接服務(wù)器數(shù)據(jù)接口,調(diào)用連接器中的sendRequest方法,將新聞獲取中需要的參數(shù)和CommandKey中對應(yīng)的命令字“news_list”一起發(fā)出去。后臺(tái)服務(wù)端數(shù)據(jù)接口相應(yīng)類EntranceServlet收到請求后,首先讀取命令字,然后調(diào)用SyncDispatcher,參照CommandKey中命令字列表,將請求轉(zhuǎn)發(fā)到新聞列表查詢器NewsQueryer,由它讀取其他參數(shù)實(shí)現(xiàn)對應(yīng)的新聞查詢,查詢結(jié)果對象通過對象輸出流返回到客戶端NewsGetter對象中另起的線程中。

從服務(wù)器中返回的數(shù)據(jù)對象為ArrayList的新聞列表,通過Handler傳遞到新聞列表UI主線程,組裝成SimpleAdapter類型的適配器,進(jìn)行頁面中ListView組件的渲染,執(zhí)行效果見圖3。

圖3 新聞列表效果圖

5總結(jié)

本文設(shè)計(jì)的安卓客戶端與WEB服務(wù)器數(shù)據(jù)傳輸方案,旨在模型化客戶端與WEB服務(wù)器之間的數(shù)據(jù)傳遞,以降低開發(fā)成本,屏蔽技術(shù)細(xì)節(jié),提高開發(fā)效率。經(jīng)過實(shí)際應(yīng)用,表明該方案是可行的,理論也是可靠的。當(dāng)然,對于該方案,還需要在更多的實(shí)際應(yīng)用中進(jìn)行驗(yàn)證和壓力測試,才能定論它的實(shí)際應(yīng)用價(jià)值。

[參考文獻(xiàn)]

[1]馬越.Android的架構(gòu)與應(yīng)用[D].北京:中國地質(zhì)大學(xué)(北京),2008.

[2]劉永玲.校園信息即時(shí)推送平臺(tái)關(guān)鍵技術(shù)的研究與實(shí)現(xiàn)[D].長沙:中南大學(xué),2014.

[3]徐婉珍.HttpClient組件及其在Android開發(fā)中的應(yīng)用探討[J].數(shù)字技術(shù)與應(yīng)用,2013,1(1):38-41.

[4]池亞平,方勇.Servlet技術(shù)與應(yīng)用方法[J].北京郵電大學(xué)學(xué)報(bào),2003,26(z1):137-139.

[5]馮鋼.Java對象流在網(wǎng)絡(luò)編程中的運(yùn)用[J].電腦知識(shí)與技術(shù),2014(23):5445-5448.

[6]昊斯特曼(美).Java核心技術(shù)(卷I)[M].北京:機(jī)械工業(yè)出版社,2008.

[7]李家科. Android的分析與開發(fā)[D]. 蘭州:蘭州交通大學(xué),2014:24-26.

[8]曹海英,元元. 基于Android系統(tǒng)的移動(dòng)校園信息平臺(tái)設(shè)計(jì)[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版), 2014(21):11-12.

(責(zé)任編輯:張凱兵)

Data Transmission Scheme Between Android Client and Web Server

Li Ran

(CollegeofComputerEngineering,JingchuUniversityofTechnology,Jingmen,Hubei448000,China)

Abstract:The data transmission between Android client and WEB server, is one of the key technologies of Android application development and also the bottleneck of Android application performance. This paper studies a variety of data transmission and the existing tools, designs a general transmission scheme, and the encapsulation of the general component in the scheme. Through the development of practical application, it shows that the scheme could be easily copied, of high development efficiency as well as practical value.

Key Words:data transmission;Android; App;HttpURLConnection

收稿日期:2016-03-19

基金項(xiàng)目:荊楚理工學(xué)院校級(jí)科研項(xiàng)目(ZR201510)

作者簡介:李冉(1979-),男,河南潢川人,荊楚理工學(xué)院計(jì)算機(jī)工程學(xué)院講師,碩士。

中圖分類號(hào):TP311

文獻(xiàn)標(biāo)志碼:A

文章編號(hào):2095-4824(2016)03-0034-04

猜你喜歡
荊楚安卓列表
巧用列表來推理
李漢超新著《荊楚詩韻》出版
荊楚老鄉(xiāng)敲鐘忙
學(xué)習(xí)運(yùn)用列表法
擴(kuò)列吧
文物表情包
改革開放40年 荊楚弄潮40人
支點(diǎn)(2018年12期)2018-12-26 02:16:32
一種基于安卓系統(tǒng)的手機(jī)側(cè)抓包分析方法
弘揚(yáng)荊楚之魂與踐行社會(huì)主義核心價(jià)值觀
安卓L未至安卓M來了!安卓首泄漏M系統(tǒng)
桦甸市| 惠来县| 洛扎县| 平乐县| 罗山县| 印江| 黔江区| 河北省| 西昌市| 库车县| 大安市| 桑植县| 筠连县| 五峰| 库尔勒市| 四平市| 鄂托克旗| 扶余县| 鸡泽县| 两当县| 丰都县| 襄城县| 望城县| 新巴尔虎左旗| 许昌市| 江源县| 靖边县| 应城市| 嘉定区| 九龙城区| 吉首市| 怀来县| 蒙阴县| 柯坪县| 博客| 宣城市| 华池县| 大石桥市| 吉安县| 洛阳市| 天长市|