基于Android Studio的天气预报APP设计与实现

2017-12-22 07:35作者周明韬湖南省衡东县第一中学
电子制作 2017年21期
关键词:控件天气预报布局

作者/周明韬,湖南省衡东县第一中学

基于Android Studio的天气预报APP设计与实现

作者/周明韬,湖南省衡东县第一中学

随着移动互联网的兴起及Android机的普及,智能手机已经成为人们日常生活中必比可少的工具。尤其国产Android手机的发展快速迅猛,相比于苹果手机有价格上的优势,故市场潜力巨大。目前,手机的功能已经不仅仅是打电话发短信,更多的是为我们的生活生产提供便利条件。以往人们不太方便获取的信息,通过手机上网可以实时获取。比如以往人们获取天气预报的方式多为收看电视节目或收听广播,而智能手机的出现可以通过网络更快更方便地获取天气信息。基于以上原因,本项目制作了一款界面简洁,操作简单的Android端天气预报应用。

Android;天气预报;APP开发;XML数据传输;Layout布局

引言

天气预报已经成为人们生活不可缺少的一部分,随着技术、需求、生活水平的发展,天气信息已经成为一个需要实时获取的消息。在这样的市场需求的基础上,本人根据用户需求设计出了具有查询当日天气、温度、风力、污染情况、其他城市天气情况等功能的天气预报APP。基于Android Studio开发,台利用HttpClient获取网络得到天气数据,通过XML解析得到的温度、湿度、风力等具体值更新今日天气UI界面数据,从数据库中读取城市列表,通过ListView展示城市列表,搜索城市等。

1.需求分析

天气预报是人们日常生活经常关注的话题,随着智能手机以及移动互联网的发展,天气预报已经可以从每天一获取变成每小时一获取,甚至实时获取。在手机上使用移动网络时时获取天气预报可以为人们出行做必要准备。

■1.1 功能需求分析

(1)对于天气预报这种应用,使用时段应该为碎片化时间,使用时长应该尽量短,使用难度应该尽量简单。

(2)定位当前位置,自动更新用户所在城市的天气信息,也可以查询不同城市的天气信息。

(3)查询信息要包括:温度、湿度、风力、PM2.5。

(4)预测未来几天的天气情况并展示。

■1.2 界面需求

扁平化的设计风格,画面简洁明了,查询天气等重要功能放置首页,天气信息采用文字和图案结合的方式,阴晴用图标代替,温度等重要信息相对于风力、湿度要更加明显。

2.系统总体设计

■2.1 功能设计

软件是基于Android平台开发的,主要有四大模块:

(1)城市管理模块:提供国内城市的列表,用户可根据首字母检索、选择。

(2)天气管理模块:用户可以查询当日的天气信息和未来七日天气信息,包括时、地点、气温、湿度、污染情况等。

(3)地理位置模块:定位用户当前城市位置,并显示相应天气。

(4)设置模块:包括用户个人偏好,分享天气信息,关于本软件等。

■2.2 UI布局

Layout 是一类特殊的控件,其本身并不显示详细内容,主要用途是为了控制其子控件的布局。例如LinearLayout(线性布局),可将子控件按垂直或水平方向按顺序排列下去;Tablelayout(表格布局),可以将子控件像表格一样,一个个放置好;Relative—layout(相对布局)更灵活,可以设定各个控件之间的对齐和排列关系,适合定制复杂的界面。布局控件还可以嵌套使用,构建出更复杂美观的界面。

这里采用嵌套布局的方式,放置一个线性布局,采用垂直方式分布,分别放置今日天气、7日天气信息以及广告信息,并指定背景图片,代码如下。

android:id=”@+id/weather_today”

android:layout_width=”f i ll_parent”

android:layout_height=”wrap_content”

android:padding=”10.0dip”>

常用控件有:TextView,Button,Toast, ImageView等,其中TextView是用于在界面上显示一段文字信息,代码如下。layout_width与layout_height分别指定控件的宽度和高度(所有控件通用),match_parent:控件大小与父布局一致,f i ll_parent:API level 8以后被match_parent取代,wrap_content:控件大小刚好包含里面的内容,大小由内容决定, text:指定控件文本,gravity:指定控件内文字的对齐方式,可以用“|”指定多个值,textColor:指定文字的颜色,textSize:指定文字的大小,id:为控件设置一个id(非必须)。

android:id=”@+id/city”

android:layout_width=”wrap_content”

android:layout_height=”wrap_content”

android:layout_alignParentLeft=”true”

android:layout_alignParentTop=”true”

android:layout_marginLeft=”15.0dip”

android:singleLine=”true”

android:text=”北京”

android:textSize=”40.0sp” />

3.系统实现

■3.1 通过HTTP协议访问数据

获取网络数据的方式有三种:WebView控件、HttpURLConnection、HttpClient。 其 中,HttpClient相比传统JDK自带的URLConnection更加灵活和易用。它不仅使客户端发送Http请求变得相对容易,而且也为开发人员测试基于Http的接口提供方便,提高开发的效率,从而提高代码的鲁棒性[1]。

HttpClient的使用方法:作为一个接口,HttpClient在使用中需要首先进行实例化,因此第一步是要创建一个DefaultHttpClient实例;根据要发送的请求是GET请求或POST请求,创建一个HttpGet对象或HttpPost对象;以POST请求为例,通过HttpPost的SetEntity()方法传入构造好的UrlEncodedFormEntity;然后使用HttpClient对象的execute()方法向服务器发送请求;再获取该方法返回的HttpResponse对象的HttpEntity对象,可使用HttpResponse的getEntity()方法获取;另外,可以通过HttpResponse的getStatusLine().getStatusCode()方法获取返回状态码,来确定是否成功,200代表成功。

■3.2 解析网络数据

在网络上传输数据时最常用的格式有两种:XML和JSON,均是通用数据交换格式.。JSON的主要优势是体积小。解析XML文件数据:在Android平台上可以使用Simple API for XML(SAX) 、Document Object Model(DOM和Android附带的Pull解析器解析XML文件[2]。我们使用pull解析器,Pull解析器的使用:读取到xml的声明返回 START_DOCUMENT;读取到xml的结束返回 END_DOCUMENT;读取到xml的开始标签返回 START_TAG;读取到xml的结束标签返回 END_TAG[3]。代码如下:

XmlPullParserFactoryfac = XmlPullParserFactory newI nstance();

XmlPullParserxpParser = fac.newPullParser();

xpParser.setInput(new StringReader(xmldata));

inteType = xpParser.getEventType();

//不断读取元素

while (eType != XmlPullParser.END_DOCUMENT) {

switch (eType) {

// 当读到文档开始标签的时候

case XmlPullParser.START_DOCUMENT:

break;

// 当读到标签元素开始标签的时候

case XmlPullParser.START_TAG:

if (xpParser.getName().equals(“city”)) {

eType = xpParser.next();

Log.d(“mWeatherLog”, “city: “+xpParser getText());

}

……

// 当读到标签元素结束标签的时候

case XmlPullParser.END_TAG:

break;

}

// 继续读取下一个元素

eType = xpParser.next();

}

■3.3 SQLite数据库设计

Android系统中内置的数据库为SQLite,一种轻量级关系型数据库,占用资源小,大概只需几百K内存,特别适合在嵌入式系统中使用,支持标准的SQL语法,支持事务机制,SQLiteOpenHelper类是Android专门为开发者提供的用于对SQLite数据库进行操作的类[4]。利用SQLiteDatabase对象可以对数据库进行CRUD操作。类中的公共函数:insert()、delete()、 update()、 query()。封装了执行的添加、删除、更新和查询功能的SQL命令。

本软件的城市数据库设计如图3.1主要包括:城市id,省份,城市名(区名),编码,拼音,首字母,缩写字母。为后续查找城市功能的实现。

图1 city数据库设计

■3.4 Android中的多线程

作为一款操作系统,必须支持多线程操作,在Android系统中,主线程和子线程分别有不同的作用,这样分工明确有利于系统分配硬件资源,提高系统性能。其中,主线程(MainThread)主要负责处理与UI相关的事件,例如:KeyPressed事件,ScreenTouched事件,Draw事件等。主线程把这些和UI相关的事件分发到相对应的组件中进行处理。所以主线程通常也被叫做UI线程。子线程主要负责除UI相关事件之外的事件,通常这些事件耗时较长,例如联网下载数据,访问数据库查找数据等[5]。代码如下:

//为主线程增加Handler:

mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0:

labelTimer.setText(“已经过 “ + msg.obj + “ 秒”);

} } };

//在子线程的循环体中增加如下语句:

Message msg = new Message();

msg.obj = timer;

msg.what = 0;

mHandler.sendMessage(msg);

4.测试

一个系统或应用从开始开发到最终发布要经过大量的测试,测试可以帮助程序员找出开发中的疏漏,帮助产品经理发现用户体验提升的空间,对于发布一款产品来说非常重要。本程序是基于AndroidStudio平台开发的应用,在编写完成程序之后,选择AndroidStudio主界面上的Run菜单,然后在下拉菜单中选中RunApp项,即可开始测试项目[6]。此外,我们将文件打包成.apk文件传输到手机并完成安装和运行,测试结果如图2。

图2 测试用例图

5.结论

综上所述天气预报系统所有预期功能都完整地实现,并且达到了预期的运行效果。Android平台的兼容性和开放性极强,本文讲述了开发思路并具体实现了在安卓平台上开发一款查看实时和未来天气的天气预报软件,在实际的测试中成功运行Android平台正在不断的发展,我们需要在日后的工作中不断探索和实践,以建立更实用的天气预报软件。

当然,本软件还有很多功能可以改进和创新,大多数天气预报app只注重显示天气的功能,没有对用户的数据进一步分析利用,未来可以对用户每日天气情况、位置进行收集,增加更加人性的功能。如:一周的天气情况,通过折线图等方式形象的展示出来;评选出最佳天气周,在天气好得时候推送旅游线路;用户界面也可以随着天气情况来改变,污染严重的时候是黑色,天气好得时候是蓝色等。使用户交互更加友好,这也是我日后需要不断完善的方向。

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

* [2] 张利国,代闻,龚海平编著.Android 移动开发案例详解[M].人民邮电出版社,2010.

* [3] 刘平.Android 手机访问服务器的一种数据交互方法[J].电子设计工程,2010.18(9).

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

* [5]Xia-huaMeng,Ye-xiangOu.A Solution for Application Transpl antation from J2ME to Android[J].2010 Intemational Conferen ce on Future Information Technology and Management Engin eering,2010,10:60-63.

* [6] 杨苗. 基于安卓手机平台的移动旅游信息系统的设计与开发[D]. 长沙:湖南大学硕士学位论文, 2013.

猜你喜欢
控件天气预报布局
先进纤维材料战略布局
基于.net的用户定义验证控件的应用分析
蚁先生的天气预报
测不准的天气预报
关于.net控件数组的探讨
如果
商用WiFi蓄势待发BAT360谨慎布局前景存疑
Lumileds汽车照明:新布局下的新思路
车展前后 探底爱信息技术布局
基于嵌入式MINIGUI控件子类化技术的深入研究与应用