本栏目责任编辑:代影数据库与信息管理ComputerKnowledgeandTechnology电脑知识与技术第8卷第22期(2012年8月)基于Android平台的物流信息查询软件的设计与实现赵强,赵永峰,杨发智,贾伟(陕西理工学院数学与计算机科学学院,陕西汉中723000)摘要:为实现即时的物流信息查询,设计了一套基于Android智能手机的物流查询系统。文中首先介绍了Android应用程序的开发方法,然后阐述了查询系统设计的体系结构和设计方法,分析了系统与物流网络查询接口的使用方法,系统进行数据处理的流程等内容,最后给出了系统的查询测试结果。关键词:物流信息;查询;Android;接口中图分类号:TN929文献标识码:A文章编号:1009-3044(2012)22-5298-05DesignandImplementationoftheLogisticsInformationQuerySoftwareBasedonAndroidSmartphonesZHAOQiang,ZHAOYong-feng,YANGFa-zhi,JIAWei(SchoolofMathematicsandComputerScience,ShaanxiUniversityofTechnology,Hanzhong723000,China)Abstract:Inordertoachievereal-timelogisticsinformation,wedesignedthelogisticsquerysoftwarebasedontheAndroidsmartphones.First,Androidapplicationdevelopmentmethodologyispresented;andthendescribesthearchitectureanddesignmethodologyoftheinqui⁃rysoftware;AnalyzehowtousetheinterfaceofthelogisticsInformationqueryandthedataprocessingprocess;finally,thequerytestre⁃sultswasgive.Keywords:logisticsInformation;query;android;interface随着网上购物的渐渐流行,对所购商品的物流追踪朝着即时化,智能化的方向发展。目前大部分的物流信息查询都是基于个人电脑,用户通过使用浏览器访问相关的物流公司网站来实现物流查询。由于个人计算机携带的不便性和互联网接入地点的限制,普通网络用户无法实现随时随地追踪物流快递的进展信息。该文介绍了一种基于Android智能手机为查询终端的物流信息查询系统的设计,可以实现移动的物流信息查询。下面,我们首先简单介绍了一下Android平台上软件开发的有关知识,然后详细分析说明了系统的设计过程和关键技术,最后给出了该系统的运行测试结果。1Android软件开发介绍Android是当前主流的智能手机操作系统之一,其架构主要由四部分构成,由下到上依次为:Linux核心层、系统运行库层、应用程序框架层和应用程序层。Android操作系统的内核属于Linux内核的一个分支,该层用来提供系统的底层服务,包括安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块。系统运行库层包括程序库和运行时库。程序库主要是一些C/C++库;运行时库包含一组核心库(提供了Java语言核心库内的大部分功能)和Dalvik虚拟机。应用程序框架层为应用程序的设计提供了可重用的一组组件,简化了用户的程序设计。应用程序层即为用户程序所在的层次,Android本身附带了一些核心的应用程序,包括e-mail客户端、短信程序、日历、地图、浏览器、通讯录等等[1-2]。目前所有的Android应用程序都是由Java语言开发的,其逻辑组成主要是通过使用应用程序框架层提供的有关组件构成。应用程序框架层中的主要组件有:Activity(活动)、Service(服务)、Content(内容)Provider和Intent(意图)等。Activity是最基本的模块之一,所有程序的流程都运行在Activity之中。Activity一般代表手机屏幕的一个屏,在其中可以添加一些Button、CheckBox等控件。一般一个Android应用是由多个Activity组成的,这多个Activity之间可以进行相互跳转。Service是一个应用程序组件,它长时间运行在后台,而没有用户界面,负责数据的更新,触发通知等工作。ContentProvider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。Intent是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯。[3-4]2物流查询系统的设计物流信息查询软件的设计主要包含:用户界面的设计;与服务端接口的通信;服务端反馈数据的解析和显示等方面。下面分别从系统架构、整体流程、接口访问、数据解析等方面来说明软件的设计内容。收稿日期:2012-05-19作者简介:赵永峰(1991-),男,陕西商洛人;杨发智(1990-),男,安徽六安人;赵强(1990-),男,陕西宝鸡人;贾伟(1977-),男,四川安县人,讲师。E-mail:jslt@cccc.net.cn电脑知识与技术Vol.8,No.22,August2012.5298数据库与信息管理本栏目责任编辑:代影ComputerKnowledgeandTechnology电脑知识与技术第8卷第22期(2012年8月)2.1系统总体架构物流信息查询系统,属于客服-服务器工作模式。服务端是各个物流公司的物流查询平台,运行在服务器上面,直接通过Inter⁃net对外提供服务;该文中设计的信息查询软件则属于客户端,是基于Android手机平台的。手机通过3G网络或WLAN访问Inter⁃net,实现与服务器的通信。由于提供快递服务的物流公司多达上百家,常用的也有几十家。客户端软件与这些物流公司的服务器的通信方式可以采用两种方式:1)直接通信方式,客户端软件直接跟每家公司的服务器进行通信;2)间接通信方式,客户端软件跟某个中间服务器进行通信,该中间服务器再与每家公司的服务器进行通信。方式1),客户端软件复杂,而且随着需要支持不同物流公司的查询,或某公司的查询接口发生改变,客户端软件就需要升级。方式2),则将这种复杂处理集中到了中间服务器上,而客户端软件处理就很容易,即使在需要支持新的物流公司的查询时,只需要升级中间服务器的软件,而其对外提供的接口保持不变,客户端软件就不用升级。综上所述,我们采用了方式二来实现该系统,可以得出系统的总体架构如图1所示。它主要由服务、网络和客户三部分构成,其中服务器由各个物流公司服务器和中间服务器构成,网络主要有Internet、3G/WLAN构成。另外,需要说明的是:中间服务器我们可以自己来设计开发,但是一方面需要详细了解各个物流公司的快递查询接口,并获得授权访问,另一方面,必须很好的设计客户软件和中间服务器间的访问接口,此外,在客户软件在提供的用户使用时,我们必须建立好中间服务器。目前考虑到实际需要,中间的服务器没有自己设计,选择了快递100来实现我们的系统。图1系统总体框架2.2客户端的数据处理流程物流信息查询系统的客户端程序的主要数据处理流程可以表示为图2。程序首先获取用户输入的查询信息参数(如物流公司和快递单号);然后构造查询语句,提交给查询服务器;最后获取服务器反馈的数据并分析。如果查询成功,则通过解析返回的数据(返回的数据可能是XML或JSON等格式数据),提取有关信息显示给用户;如果查询错误,则提示错误原因。图2客户端的数据处理流程2.3获取用户输入信息Activity是Android应用程序的基础功能单元。一个Activity可以做很多事,但是他自己并不会显示到屏幕上,需要使用view、viewgroup和Layout等组件来表达用户界面单元。Android中的界面生成有三种方式:XML配置生成;用户界面接口生成;代码生成。根据MVC原则,UI应该与程序逻辑相分离,因此,在XML中定义UI结构是高度推荐的。本系统设计定义了两个Activity,第一个Activity主要包含有一个ListView组件(用于让用户选择快递商),第二个Activity主要包5299本栏目责任编辑:代影数据库与信息管理ComputerKnowledgeandTechnology电脑知识与技术第8卷第22期(2012年8月)含有一个EditText(用于输入快递单号)和一个TextView(用于显示查询结果),Activity之间通过使用Intent实现通信。图3是本项目的相关界面设计。图3XML定义的统界面同时对定义的Button按钮对象设置了监听器(匿名内部类),用户监听Button对象的单击事件,表示用户输入完信息,开始提交给服务器准备查询代码如下。btn.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){//相关操作}});2.4通过快递访问接口与服务器进行交互客户程序在向服务器通信时,客户端程序通过访问服务端提供的有关应用程序访问接口API(ApplicationProgrammingInter⁃face),提交有关的信息查询参数给服务器;服务端根据所提交的参数,返回对应的符合某种格式的查询结果信息。可见,客户程序与服务器通信的接口是系统的关键技术之一。由于本项目采用的快递查询服务器网站是快递100,快递100提供了多种快递访问接口。因为该文程序是在手机平台上使用,所以申请的是快递100提供的APIURL接口,该接口支持绝大部分快递公司,其可以支持返回多种不同格式的完整结果。该接口的样式如下[7]:=[key]&com=[tiantian]&nu=[1111]&valicode=[xx]&show=[0|1|2|3]&muti=[0|1]&order=[desc|asc]其中的参数说明如表1。表1快递访问接口参数说明[7]名称idcomnuvalicodeshowmutiorder类型StringStringStringStringStringStirngStirng是否必需是是是否否是否描述身份key,16位字母和数字的组合(大小敏感),需申请。查询物流公司代码。查询快递的单号。查询快递的电话号码。返回类型。0:json字符串(默认);1:xml对象;2:html对象;3:text文本。显示一行还是多行的选择。desc:按时间由新到旧排列;asc:按时间由旧到新排列(默认)。程序设计中将查询的参数构造为一个接口样式的URL字符串,该字符串作为一个参数,创建为一个Java中的URL对象,然后由JavaURL打开一个URLConnection,将查询数据提交给服务器。由JavaURL流获得一个JavaInputStream,通过该流可以获得服务器的反馈数据。有关代码如下://构造一个URL对象URLurl=newURL(=1620f21aeedbecb6&com=+this.strkuaidishang+&nu=+this.strkuaidihao+&show=3&muti=1&order=desc);//得到一个URLConnection对象URLConnectioncon=url.openConnection();con.setAllowUserInteraction(fa