安卓客户端与WEB服务器数据传输方案的实现
2016-06-27李冉
李 冉
(荆楚理工学院 计算机工程学院, 湖北 荆门 448000)
安卓客户端与WEB服务器数据传输方案的实现
李冉
(荆楚理工学院 计算机工程学院, 湖北 荆门 448000)
摘要:安卓客户端与Web服务器之间的数据传输,是安卓应用开发的关键技术之一,也是安卓应用性能的瓶颈。笔者深入研究了各种数据传输方式和现有工具,设计了一套通用的传输方案,对方案中通用的构件进行了封装。经过实际的开发应用显示,该方案可复制性好,开发效率高,具有实用价值。
关键词:数据传输;Android; App;HttpURLConnection
近年来,随着4G时代的开启以及智能移动终端设备的平民化,移动互联网的发展日新月异。基于互联网的各类应用也不断地向移动互联网延伸,APP的下载与安装成为每一部智能手机必备的功能。绝大部分APP不是一个孤立的移动互联网应用,都由服务器提供数据服务、计算服务或资源服务,而服务器采用Web服务器居多,它具有开发简单、易于维护的优点。因此,APP与服务器的数据通信是移动互联网应用的关键技术之一。
Android是一种基于Linux、开源的操作系统,主要使用于移动设备,由Google和开放手机联盟领导开发[1]。由于Android的开源特性,市场份额飞速增长,据IDC数据显示,截至2014年,Android用户达到81.5%,遥遥领先于IOS和WP。
本文主要研究基于Android的APP与WEB服务器之间的数据通信技术,设计并实现一个通用的数据传输方案,可应用于大部分移动互联网应用的开发实践,以屏蔽数据传输技术细节,提高开发效率。
1安卓客户端与Web服务器数据传输技术
安卓客户端与Web服务器数据传输主要有两种类型:一种基于Socket,另一种基于HTTP。Socket可以实现客户端与服务器的通信,但是偏底层,难度大,数据的读写较麻烦,一般不直接使用。HTTP 协议是现在互联网上使用最多、最重要的协议,很多应用程序直接通过 HTTP 协议获取网络资源和数据通信。基于Http的安卓客户端与Web服务器数据传输组件主要有两个,即HttpClient与HttpURLConnection。
1.1HttpClient
HttpClient是 Apache Jakarta Common旗下的一个开源项目,它是一个基于HTTP协议的客户端编程工具库,提供功能丰富的支持 HTTP 的工具类,并且版本在不断更新[2]。
1.2HttpURLConnection
HttpURLConnection是一种轻量级的HTTP客户端工具类,可适用于大多数的应用程序[3]。虽然它的API比较简单,但是人们可以更容易地使用和扩展它。
1.3两者比较
HttpURLConnection是安卓平台的标准实现,支持系统级连接池,打开的连接在一段时间内所有程序可共用,直接在系统层实现缓存策略处理,加快了重复请求的速度。而HttpClient是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情它全部可以做;但由于HttpClient的API体系较大,很难在满足向上兼容的情况下进行升级和扩展。因此,目前安卓团队对提升和优化HttpClient组件的工作态度并不积极。
2通用的数据传输方案
根据对HttpClient和HttpURLConnection的分析研究,本文采用HttpURLConnection组件设计一套通用的数据传输方案,并将方案中共性的功能模块封装成通用的工具,实现安卓客户端与Web服务器之间传输各类数据的功能。传输方案的总体框架如图1所示。
图1 通用传输方案框架图
对于通用传输方案框架的说明如下:
(1)该方案框架中,客户端与服务器之间所有的数据交换都是以对象流的形式实现。
(2)通用连接器属于固定的功能模块,由HttpURLConnection封装实现。
(3)Web服务器只开通一个数据服务接口,这样客户端便于维护服务器的地址。
(4)所有的命令字构成命令字集合,相当于数据请求协议,用于各类请求的区分。
(5)对于Android客户端的某一数据请求,首先调用通用连接器实例,通过sendRequest()方法向服务器唯一的数据接口发送http请求。请求中所有的参数(包括命令字),通过对象输出流一起提交。服务器端数据服务接口收到请求后,调用请求分发器进行业务分发,最后将数据结果通过对象输出流返回到客户端。
3功能模块的封装
3.1通用连接器的封装
客户端通用连接器类Connector由HttpURLConnection组件进一步封装来实现。为了实现连接器中请求发送方法的通用性,所有的参数(包括命令字),都以对象流的方式向服务器提交。连接器中的异常一律抛出,客户端在表示层中才进行捕获,便于页面的跳转控制。主要代码如下:
public class Connector {
private static String urlPath; //web服务器数据请求地址
private HttpURLConnection conn;
public Connector() throws IOException{
urlPath = “…”;
initConnection(); }
//数据请求发送方法,返回结果数据对象输入流
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 建立科学合理的审计质量评价机制,首先要从制度上给予质量评价相应的依据。目前我国在这一方面才刚刚起步,许多事物尚且停留在总括式概念的程度。因此金融监管部门应当在基于本国国情的基础上借鉴外来经验,建立起一套适应我国国情的审计质量评价机制。加强质量评价队伍建设,培养高素质的审计质量评价专业人士,提高质量评价队伍的准入门槛,坚持择优录取的同时也要合理配置人才资源,做到人尽其才。 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服务器数据接口的封装 在Web服务器中采用Servlet来实现请求监听,整个服务器只创建一个数据接口Servlet,封装为EntranceServlet类[4-5]。在doPost方法中,通过request和response对象分别获取对象输入流ois和对象输出流oos,然后调用请求分发器进行请求分发[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); //请求分发器进行请求分发 } catch (Exception e) { …… } } } 3.3服务器请求分发器的封装 在服务器中,请求分发器是一个相对固定的工具类,类中dispatch()方法的实现一般根据具体的业务进行扩展[8]。本方案中所有命令字在CommandKey类中,以常量的形式存储。主要代码如下: public class SyncDispatcher { public static void dispatch(ObjectInputStream ois,ObjectOutputStream oos){ String cmdKey= (String)(ois.readObject()); //输入流的第一个对象即为命令字 if(CommandKey.NET_TEST.equals(cmdKey)){ //如果是测试命令字 test(ois,oos); }else if(CommandKey.KEY2.equals(cmdKey)){ … //调用服务器中相应的服务业务类实现数据请求服务 }else if( … ) … ois.close();oos.flush();oos.close(); } } 4实际应用案例 本文以荆楚校园通新闻列表的获取为例,简略展示该方案的实际应用。荆楚校园通是一个由APP客户端和后台管理端构成的信息服务系统,客户端采用Android的原生API进行开发。在APP中,所有与后台管理端的数据通信均采用本文所设计的传输方案,可以方便地传输文字、图片、文件等各类数据,系统开发效率高,总体运行速度快,性能稳定。 荆楚校园通新闻列表动态地从后台获取,包括新闻标题、简介、封面图片等属性,获取的流程如图2所示。 图2 数据获取流程 图2中,NewsGetter是客户端负责获取新闻列表的一个封装类。在这个类中,另外创建一个线程,使用通用连接器Connector连接服务器数据接口,调用连接器中的sendRequest方法,将新闻获取中需要的参数和CommandKey中对应的命令字“news_list”一起发出去。后台服务端数据接口相应类EntranceServlet收到请求后,首先读取命令字,然后调用SyncDispatcher,参照CommandKey中命令字列表,将请求转发到新闻列表查询器NewsQueryer,由它读取其他参数实现对应的新闻查询,查询结果对象通过对象输出流返回到客户端NewsGetter对象中另起的线程中。 从服务器中返回的数据对象为ArrayList的新闻列表,通过Handler传递到新闻列表UI主线程,组装成SimpleAdapter类型的适配器,进行页面中ListView组件的渲染,执行效果见图3。 图3 新闻列表效果图 5总结 本文设计的安卓客户端与WEB服务器数据传输方案,旨在模型化客户端与WEB服务器之间的数据传递,以降低开发成本,屏蔽技术细节,提高开发效率。经过实际应用,表明该方案是可行的,理论也是可靠的。当然,对于该方案,还需要在更多的实际应用中进行验证和压力测试,才能定论它的实际应用价值。 [参考文献] [1]马越.Android的架构与应用[D].北京:中国地质大学(北京),2008. [2]刘永玲.校园信息即时推送平台关键技术的研究与实现[D].长沙:中南大学,2014. [3]徐婉珍.HttpClient组件及其在Android开发中的应用探讨[J].数字技术与应用,2013,1(1):38-41. [4]池亚平,方勇.Servlet技术与应用方法[J].北京邮电大学学报,2003,26(z1):137-139. [5]冯钢.Java对象流在网络编程中的运用[J].电脑知识与技术,2014(23):5445-5448. [6]昊斯特曼(美).Java核心技术(卷I)[M].北京:机械工业出版社,2008. [7]李家科. Android的分析与开发[D]. 兰州:兰州交通大学,2014:24-26. [8]曹海英,元元. 基于Android系统的移动校园信息平台设计[J].赤峰学院学报(自然科学版), 2014(21):11-12. (责任编辑:张凯兵) 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 基金项目:荆楚理工学院校级科研项目(ZR201510) 作者简介:李冉(1979-),男,河南潢川人,荆楚理工学院计算机工程学院讲师,硕士。 中图分类号:TP311 文献标志码:A 文章编号:2095-4824(2016)03-0034-04