APP下载

Android手机访问服务器的一种数据交互方法

2010-06-05刘平

电子设计工程 2010年9期
关键词:服务器端客户端终端

刘平

(西安财经学院 网络与现代教育技术中心,陕西 西安710061)

为了让手机用户能够在任何时候 (Anytime)、任何地方(Anywhere)、以任何方式(Anyway)查询企业所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端,手机通过移动网和互联网访问企业Web网站并处理各项业务(移动商务系统)。从市场的角度来讲,将企业提供的服务通过现代的先进技术拓展到手机终端,是一项具有极大潜在的市场需求。由此可见,能够给手机终端提供有效、便捷和清晰地访问Web服务器数据的方法在实际中非常有用。随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。Google为此于2007年11月推出了一个专为移动设备设计的软件平台——Android,它是一套真正意义上的开放性移动设备综合平台,其包括操作系统、中间件和一些关键的平台应用(见图1)。Android最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Android里面包含非常丰富的图形组建,多媒体支持功能和非常强大的浏览器[1]。Android平台的开放性等特点既能促进技术(包括平台自身)的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化产品,因此,它具有很大的市场发展潜力。谷歌的Android手机操作系统在发布以后,每年的Android手机上市速度惊人,预计在不久将来大有占据手机大份额市场的可能,Android手机应用程序是以XML文件作为其界面和数据的描述文件,对于每一个组件和数据都有唯一的R.java文件标识,根据这些标识来加载和确定组件对象,进而通过事件来驱动事务,Android的重要技术是提供了一套API来解析这些XML描述文件,编写的程序紧凑、数据安全,界面丰富,交互模式多样化,应用程序架构清晰,同时也比较抽象,对开发人员要求比较高。但是由于Android发布的是新技术,难免在实际应用中还存在发展的空间,有些方面还需要进一步完善,需要在市场中不断开发新的技术结合Android提供的API,将开发的应用程序更加安全、完美和有效。为此,笔者经过对Android提供的API访问Web服务器进行数据通信进行了系统研究,认为Android提供的技术在框架上很大的优势,但在具体取数据和发数据的细节上还需要增加新的技术来弥补。为此,本文笔者就开发Android手机软件过程中创建的数据交换和提取不同类型数据的方法和过程进行了阐述,为开发者提供参考。

1 Android手机访问Web服务器技术架构

图1 Android系统架构图Fig.1 Android system architecture

大多数中间件技术开发人员熟悉如何用计算机浏览器访问互联网,浏览器的主要作用是给互联网的Web服务器提交数据、验证数据和解析显示数据。其工作原理是通过Http协议,提交数据用GET或者POST方法,客户端的数据通过浏览器网页提交给Web应用服务器,应用服务器通过Web页面接收各种不同类型数据,将数据通过服务器的Servlet子类HttpServlet对象提交给服务器端处理逻辑,服务器逻辑将接收到的数据按照客户端的要求在Web服务器端进行运算,再将运算的结果返回给客户端浏览器进行解析和显示。这里关键是Web服务器端的Servlet,它是服务器和客户端交互数据的服务器端端口,即所有客户端的数据都要通过Servlet提交给Web服务器,所有要返回给客户端的数据都要通过Web服务器端的Servlet响应给客户端。在实际应用的服务器端,创建Servlet的子类对象HttpServlet[2](HttpServletRequest和HttpServletResponse),分别用来接收客户端的数据和将数据返回给客户端。

现在的问题就在Android手机终端,如何能够把客户的数据通过手机界面提交给Web服务器?Android手机终端访问Web服务器的技术架构是怎样的?又如何能够在手机终端把Web服务器响应的数据按照服务器的不同数据类型恢复原型?这就是下面要解决的问题。

1.1 手机客户端向Web应用服务器发送请求信息

以实际开发的Android手机终端登录功能为案例介绍如何利用Sun公司提供的java数据流和过滤流结合Android提供的API提取Web服务器端不同类型的数据。

1)首先引用所需要的各种API 在Android手机终端开发应用程序时,首先需要利用Google和Sun公司提供的必要类包(API),包括Http通信协议下的类org.apache.http.*手机端端类org.apache.http.client.*消息类org.apache.http.message.*数据流类java.io.*交互界面类java.util.*,android.app.Activity操作描述类android.content.*键值处理类android.os.Bundle;日志类android.util.Log显示组件类android.view.*和界面类android.widget.*等。

2)定义访问网站的URL

3)创建Android程序界面类 创建一个手机界面,需要继承Android提供的Activity类,在该类中创建提交给Web服务器的数据的HttpPost对象,覆盖Activity类的方法on-Create(Bundle b),创建事件监听器 OnClickListener对象,在其中实现onClick(View v)方法,再把该事件监听器注册到相应的事件源loginButton上。主要代码如下:

4)创建HttpPost对象 HttpPost对象的主要作用是将Android手机端的数据提交给Web应用服务器,为此Android提供了很好的API,这里就利用Android和Sun公司提供的这些类把需要提交给服务器的数据(NameValuePair对象)保存到一个List对象中,主要代码如下:

5)设置数据编码方式 Android手机在将准备好的数据发送到Web服务器之前,需要对数据的编码进行规定,这样服务器在接收到这些数据后,就会根据发送过去的文字编码处理和显示,代码如下:

6)提交HttpPost对象和获取服务器HttpResponse响应数据 完成前面的工作,就该将数据提交给Web应用服务器了,在应用服务接收Android手机提交的数据后,经过处理,将要返回(响应)给Android手机的数据打包到一个HttpResponse对象中,发回给手机,代码如下:

到此,Android平台的通信任务已完成,即将Web服务器相应过来的数据交给了httpResponse对象,剩下来的工作就是如何将Web服务器响应过来的数据从httpResponse对象中取出。

1.2 手机终端提取服务器端的响应数据

1)获取响应服务器的数据 从Web服务器响应到手机终端的数据一般打包在一个字节数组中,关键是这个字节数组中可能包含了各种不同的数据类型,为此,需要采取Java数据流和过滤流的方法从字节数据中取出各种类型的数据,这是本文介绍的关键技术,代码如下:

将字节数组中的数据还原成原来的各种数据类型 ,代码如下:

到此手机终端从Web服务器获取了所有类型的数据,剩下的任务就是将这些数据进一步交给Android手机终端View组件[3],在手机界面上显示给用户,这方面的内容不再赘述。

2 服务器端接收和响应Android手机终端请求

在Android手机终端发送请求后,接收请求的Web服务器端会根据请求的数据信息进行运算,然后把运算结果响应给手机客户端。下面介绍Web服务器如何实现这一过程的。

2.1 采用http的Post方法接收数据

1)引用所需API 在Web端开发应用程序时,首先需要利用Sun公司提供的必要类包(API),包括数据流类java.io.*交互界面类java.util.*数据通信端口类javax.servlet.*通信协议类javax.servlet.http.*用Spring架构通过XML文件注入数据 对 象 类 org.springframework.web.context.*,org.springframework.web.context.support.*service.CustomerService等。

2)创建Servlet类数据端口 创建Servlet对象就是创建了Web应用服务器和连接互联网上所用客户端通信设备的数据接收和发送端口,主要代码如下:

3)访问持久层检索数据 这里应用已经完善的Spring管理事务的对象方法来获取持久层的数据,主要代码如下:

4)创建输出流数据流对象 这里创建的输出流对象主要是把响应的数据发送到手机端,由于可能是不同类型的数据,所以采用DataOutputStream对象来处理,用输出过滤流对象[4]将不同类型的数据返回手机终端,主要代码如下:

2.2 配置服务器端组件集成文件(XML)

Web应用服务器端用到的是SSH架构[5]技术,服务器的业务逻辑已经成熟,只需要将Spring的业务通过前述的Servlet进行封装,就可以将所有的Spring管理的事物业务通过Servlet和Android手机进行交互,方法是在Spring的ApplicationContext.xml文件中增加下面的配置即可。ApplicationContext.xml文件主要配置如下:

这样服务器响应给手机终端的数据处理部分完毕,一次交互过程完成。

3 结束语

Android提供的API仅仅把从Web服务器中的数据响应到手机终端的HttpResponse对象中,接着将该对象中的数据转化成字节数组,由于响应过来的数据可能是各种不同的类型,都包含在该字节数组中,要将自己数组中的数据还原成服务器端原有的数据类型,就要采用别的方法,于是采用了Sun公司提供的ByteArrayInputStream[6]过滤流和DataInput-Stream流绑定的方法,利用DataInputStream提供的各种readXxx()方法,就可以把Web服务器端发过来的不同数据类型Xxx数据提取出来,然后交给Android提供View[7]对象在界面上进行处理。这样就为Android手机访问Web服务器提取不同类型的数据提供了技术构架[8-9],为Android和其他种类的手机开发人员提供了参考。

[1]Burnette Ed.Android基础教程[M].张波,高朝勤,杨选,等译.北京:人民邮电出版社,2009.

[2]彭晨阳.java实用系统开发指南[M].北京:机械工业出版社,2004.

[3]王向辉,张国印,陈洁.Android应用程序开发[M].北京:清华大学出版社,2010.

[4]廖文奎.Struts编程基础与实例精讲[M].北京:中国电力出版社,2006.

[5]Deitel P J,Deitel HM.Java for programmers[M].张君施,译.北京:电子工业出版社,2010.

[6]罗会波.JSF第一步[M].北京:清华大学出版社,2007.

[7]余志龙.Google Android SDK开发范例大全 [M].北京:人民邮电出版社,2009.

[8]连晋平,刘平.Web Service技术在移动通信商务手机终端的应用[J].电子设计工程,2008,16(7):64-65.LIAN Jin-ping,LIU Ping.Application of Web Service in mobile-communication-business cell phone[J].Electronic Design Engineering,2008,16(7):64-65.

[9]连晋平,李梅,刘平.3G移动商务系统的数据层次和状态分析[J].电子设计工程,2010,18(2):132-133.LIAN Jin-ping,LI Mei,LIU Ping.Analysis of data levels&states of3G mobile business affairs system[J].Electronic Design Engineering,2010,18(2):132-133.

猜你喜欢

服务器端客户端终端
Linux环境下基于Socket的数据传输软件设计
X美术馆首届三年展:“终端〉_How Do We Begin?”
通信控制服务器(CCS)维护终端的设计与实现
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
浅析异步通信层的架构在ASP.NET 程序中的应用
基于Qt的安全即时通讯软件服务器端设计
多功能北斗船载终端的开发应用
ABB Elastimold 10kV电缆终端及中间接头