APP下载

基于Android系统的扬州空气质量AQI指数手机查询客户端的设计与实现

2015-03-19

常州信息职业技术学院学报 2015年2期
关键词:控件扬州空气质量

张 亮 王 超 王 祥

(扬州工业职业技术学院电气信息工程学院 江苏扬州 225127)



基于Android系统的扬州空气质量AQI指数手机查询客户端的设计与实现

张 亮 王 超 王 祥

(扬州工业职业技术学院电气信息工程学院 江苏扬州 225127)

随着城市化进程的加快,中国各地区的空气质量越来越受人关注,各地环保部门纷纷开通了官方网站来发布实时空气质量指数,但官方发布的支持手机端的查询软件还非常少见。本项目采用java编程语言,在Android平台实现了一个查询客户端来读取并解析扬州环保局所发布的实时空气指数,供智能手机用户随时了解扬州地区的空气质量,经过测试,取得了良好的效果。

Android; 空气质量; AQI

0 引言

近年来,随着中国工业化进程的快速发展以及家用汽车的普及,各大城市空气质量明显下降,据研究,PM2.5已经取代PM10,成为城市空气污染的第一因素。PM2.5主要对呼吸系统和心血管系统造成伤害,包括呼吸道受刺激、咳嗽、呼吸困难、降低肺功能、加重哮喘、导致慢性支气管炎、心律失常、非致命性的心脏病、心肺病患者的过早死。因此,对包括PM2.5在内的空气指数进行实时查询并发出预警,对敏感人群有十分重要的意义。

1 研究背景

目前,各地环保部门基本都开设了官方网站来发布空气质量实时指数,为了实现动态效果,这些网页一般都采用了大量的第三方控件,如Flex、silverlight等技术,手机浏览器无法解析这类非标准HTML网页,必须使用电脑来查看。而随着智能手机的普及,人们迫切需要通过手机来随时了解所在地区的空气质量,但官方网站很少提供手机查询客户端下载。目前虽有一些手机APP可以提供包括扬州在内的各大城市空气质量指数,但其数据来源不明,通过实测发现,很多时候这些软件显示的数据和官方网站的数据并不一致,权威性和可靠性无法得到保障[1]。

2 客户端实现

本项目的目标是开发一个基于Android系统的手机客户端,通过移动数据网络功能,模拟http操作,获取扬州环保局官方网页提供的空气指数实时数据并进行解析,使用户可以随时随地地查询当前扬州的空气污染指数并做出相应的防护。

2.1 数据获取

扬州环保局早在2013年就建立了官方空气质量指数(AQI)发布平台,网址为http://222.189.163.87:8023/#,目前已经能够提供包括扬州市区和下辖全部县市在内共8个监测点的实时空气质量指数,是扬州地区最权威的空气质量指数发布单位,想开发扬州空气质量指数手机客户端,必须从该平台获取实时数据。遗憾的是,该网站本身不提供任何公开的API接口对外发布数据,如想获得数据,只能对网站本身前端代码进行分析,找出其数据接口。通过使用浏览器开发者工具对网站代码载入后进行跟踪分析,可以得出该网站后台AQI数据接口地址为http://222.189.163.87:8023/Ajax/AjaxTab.ashx?li=AQI,PM2.5数据接口为http://222.189.163.87:8023/Ajax/AjaxTable.ashx?li=PM25_1,其他指标的接口也可以以此类推。以AQI接口为例,在浏览器打开该URL后,显示的是多条类似[{"site":"2000","siteName":"扬州监测站","经度":"119.40444","纬度":"32.40944","item":"AQI","IAQI":"68"},]这样形式的JSON格式数据,因此,客户端软件需要对JSON数据进行解析,才能显示正确的结果[2]。

2.2 JSON数据解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言[3]。在Android客户端设计实践中,大量采用JSON格式数据在客户端和服务器端进行信息的交互,因此,在Android程序设计中,对JSON数据的解析是非常普遍的需求,实现的方法也是多种多样的,Android系统本身就自带了org.json包用于对JSON数据进行解析,但通过实测,官方包中提供的类功能太过简单,使用也比较繁琐,并不适合使用。除了官方提供的包,目前网络上还存在大量第三方类库提供JSON解析功能,其中Google提供的gson[4]库是其中杰出的代表,在本项目中,即选择gson类库来进行JSON解析。gson是一个开源项目,为Android平台提供了一个轻量级的高效的JSON库,使用方便,其关键代码如下:

Type listType = new TypeToken>() {}.getType();

Gson gson = new Gson();

LinkedList aqidatas = gson.fromJson(aqiresult, listType);

其中Aqi类是项目中自定义的空气指数类,用来保存监测站点名称和实时AQI指数,aqiresult是通过HttpURLConnection类从数据接口获取到的原始JSON数据字符串,可以看到,gson的使用非常简单,只要通过gson.fromJson这个简单的方法,就可以把原始的JSON数组解析为本地类型对象的链表。

2.3 主界面设计

通过数据接口获取数据并解析后,如何将数据显示到程序主界面上成为主要任务。本项目选择Listview控件来进行数据的展现。通过将上文得到的Aqi链表作为数据源与Listview适配器相连,并通过恰当的布局管理,可以很容易地在主界面展示相关的数据。另外,除获取AQI数据外,本项目还获取和解析了实时PM2.5和PM10数据,为了能够在同一个界面上方便地浏览多种数据,需要采用多屏切换技术。在Android程序开发中,有多种技术可以实现多屏切换,传统上APP程序通常使用多个标签tab和activity来实现这一效果,用户点击不同的tab标签,就可以在不同的界面之间进行切换,如新浪微博官方客户端就用了这种实现方式。但这种实现方式最大的缺点是不能通过手指滑屏实现多个屏幕的滚动切换。随着微信等支持滑屏切换技术的客户端的流行,这种多屏切换方式越来越得到用户的喜爱和认可,因此,Google在官方设计规范中也推荐这一技术,同时在Android Support v4包中提供了ViewPager和Fragment两个类来支持这一方式的实现。在具体编程中,需要实例化一个主界面activity对象和以及多个和滑屏界面一一对应的fragment对象。通过对activity布局文件的设置,将ViewPager对象作为控件布置在主界面activity的合适位置。再通过不同的布局文件为每一个fragment进行布局,并将所有fragment和FragmentPagerAdapter对象相关联,最后通过ViewPager. setAdapter(FragmentPagerAdapter fm)方法将上述适配器对象和ViewPager进行绑定,即可实现滑动滚屏效果。在设计本项目时,项目团队考虑到空气指数是实时更新的,用户大都习惯采用刷新主界面的方式来试图获取最新的数据,如果不提供这一刷新功能,即使主界面上显示的就是实时从官方服务器抓取的数据,可能也会降低很多用户的信任程度。因此,在开发时必须提供对LIstView控件的刷新功能。Google官方开发套件中提供的ListView类并无相关功能,但第三方开源项目PullToRefresh[5]为实现这一功能提供了便利,在开发时,只需要在工程中导入相关lib的jar包,并使用包中提供的PullToRefreshListView取代原有ListView控件,在对PullToRefreshListView对象设置setOnRefreshListener监听器后,即可监听刷新事件,并在回调方法中调用联网更新数据的代码。最后,通过调用PullToRefreshListView的getRefreshableView方法获取真正在界面上显示的ListView对象,通过设置适配器的方法将得到的数据在界面上进行展示。通过上述步骤,即可实现主界面列表的下拉刷新,限于篇幅,对具体代码不再赘述,相关API用法可参考github开源代码库[6]。本项目最终效果如图1所示。

3 结束语

本项目系扬州工业职业技术学院大学生实践创新项目成果,开发完成后,已在校园内部进行了初步测试,测试结果表明,由于该软件兼容性好,安装使用方便且流量消耗很小而深受广大学生欢迎。项目团队正在优化相关模块功能,进一步对系统进行完善,并争取能够早日在各大Android市场上架供公众下载使用。

[1] 季云峰. 基于Android和ARM的嵌入式web服务器平台设计[J]. 无锡职业技术学院学报,2012(3):69-71.

[2] 宋杰,党李成,郭振朝,等. Android OS手机平台的安全机制分析和应用研究[J]. 计算机技术与发展,2010(6):152-155.

[3] 胡史望,莫家庆. 基于Android的移动应用开发研究[J]. 软件导刊,2014(11):18-20.

[4] 沈美. 浅析在Android系统中JSON和GSON的用法[J]. 电脑编程技巧与维护,2014(24):81-83.

[5] 孔令宏. Android中的ListView控件的优化方法[J]. 电子技术与软件工程,2013(21):270.

[6] 王倩文.基于Android的城市空气质量查询系统的设计与实现[J].电脑知识与技术,2013(34):7898-7900.

Design and Implementation of Mobile App Inquiring Yangzhou AQI Based on Android System

ZHANG Liang WANG Chao WANG Xiang

(Department of Electronic Information and Engineering, Yangzhou Polytechnic Institute, Yangzhou 225127, China)

With the rapid development of urbanization, more and more people are paying attention to air quality. Environment protection departments are setting up official websites to publish the real time AQI, but little effort is made to develop mobile app to inquiry the information on smart phone. In this project, a mobile app based on Android platform is developed using java. This app can provide the real time AQI of Yangzhou. The effectiveness of this program is proved in practical use.

Android; air quality; AQI

2015-01-13

2013年江苏省大学生实践创新训练研究成果(201313754013X)

张 亮(1981-),男,讲师,硕士,主要研究方向:计算机

TP 311.52

A

1672-2434(2015)02-0011-03

猜你喜欢

控件扬州空气质量
我那水蛇腰的扬州
扬州的夏日
关于.net控件数组的探讨
扬州的秋日
“空气质量发布”APP上线
车内空气质量标准进展
重视车内空气质量工作 制造更环保、更清洁、更健康的汽车
开展“大气污染执法年”行动 加快推动空气质量改善
下扬州
就这样玩会VBA中常见的自定义控件