admin 管理员组

文章数量: 887021


2023年12月17日发(作者:电子琴format什么意思)

本科毕业论文(设计)

题 目 基于Android平台的天气预报软件设计

基于Android平台的天气预报软件设计

摘要:Google于2008年推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。Android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验。因此,对于软件从业人员来说,Android平台具有无限的吸引力。目前Android操作系统已经成为用户最多的智能操作系统。

本天气预报软件的设计,为Android终端用户提供一款方便的实时天气预报查询软件,为用户带来良好的用户体验及便利的对天气情况进行掌控。本天气预报软件采用ViewFlipper组件,提供友好的界面滑动切换方式,同时减少系统运行时占用的空间。使用Files方式保存天气信息,Shared Preferences保存用户偏好设置,节约了文件存储的空间。本文就在分析讨论Android手机软件开发技术原理的基础上,利用Android中基本组件和常用设计模式,开发出能为用户提供更好的基于Android平台的手机天气预报软件。

关键字:Android;天气预报;智能手机平台

Design of weather forecast software Based on the Android

Google in 2008 launched a product called the Android open source smart

Abstract:phone operating system, which uses the Linux kernel, Open Handset Alliance (OHA)

members can be free to use and modify the SDK package, open source, it has good

scalability of the system. The most important feature of Android is its open

architecture, not only has a very good development and debugging environment, but

also supports a variety of scalable user experience. Therefore, for software

professionals, the Android platform has unlimited appeal. Android operating system

has become the user the most intelligent operating system.

The weather software designed for the Android end users to provide a convenient,

real-time weather query software, to provide users with a good user experience and

convenience of control of the weather conditions. The weather forecast software the

ViewFlipper components, friendly interface sliding switch, while reducing the space

occupied when the system is running. Files saved Weather Information, Shared

Preferences to save user preferences settings, save the file storage space. This article

on the basis of analysis and discussion of the Android mobile phone software

development technical principles, using the basic components and common design

patterns Android, developers can provide users with better mobile phone weather

forecast software based on the Android platform.

Keywords:Android;weather forecast;smart phone platform

目 录

1系统概述 ........................................................ 1

1.1 研究内容 ................................................ 1

1.2 研究意义 ................................................ 1

1.3 研究现状和发展趋势 ...................................... 1

2系统分析 ........................................................ 4

2.1 研究目标 ................................................. 4

2.2 需求分析 ................................................. 4

2.3 性能分析 ................................................. 4

3程序设计 ........................................................ 6

3.1 用户界面设计 ............................................. 6

3.2 程序模块设计 ............................................. 9

4程序开发 ....................................................... 10

4.1 文件结构与用途 ......................................... 10

4.2 数据存储 ............................................... 13

4.2.1 Shared Preferences .................................... 13

4.2.2 Files ................................................. 14

4.3 主要功能代码 ........................................... 18

4.3.1 获取天气数据 ......................................... 18

4.3.2 网络检查 ............................................. 20

4.3.3 定时更新时间 ......................................... 21

4.3.4 ViewFlipper手势监听 ................................... 21

4.3.5 城市管理中城市点击事件 ................................ 23

4.4 主要界面结构布局代码 ................................... 24

4.4.1 ViewFlipper框架结构 ................................... 25

4.4.2 城市管理界面 .......................................... 25

4.4.3 生活指数 .............................................. 26

4.4.4 城市简介 .............................................. 27

5系统测试 ....................................................... 29

I

总结 ............................................................. 36

参考文献 ......................................................... 37

致 谢 ............................................................ 1

II

1系统概述

1.1 研究内容

Android平台手机天气预报软件是基于Android手机平台,运用Java语言,应用/网站上提供的免费的webService接口获取天气预报信息,深入研究Android平台Activity、Service、Broadcast Receiver、Content Provider这四大组件及Android平台的程序运行机制,开发出针对使用Android平台的手机天气预报系统。

1.2 研究意义

Android平台手机天气预报软件的开发可以进一步扩大气象信息的覆盖面,让广大公众能够在第一时间方便快捷地获取最新的气象预报(预警)信息,以便提前预防,把气象灾害造成的损失降到最低。同时也可以强化气象公共服务的职能,完善公共服务体系、改善公共服务手段、增加公共服务产品、提高公共服务质量,更好地发挥了气象事业对经济社会发展的现实性作用。

1.3研究现状和发展趋势

据百度数据研究中心2012年Q3手机操作系统及应用分析数据显示,随着智能手机的发展,操作系统越来越受到网民的关注。在刚刚过去的Q3,Android和iOS继续蚕食Symbian的份额,其中Android更是以接近55%的关注度进一步巩固其第一的位置。

1

图1 手机操作系统关注度变化趋势图

安卓是首款开源代码的操作系统,采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改安卓的SDK软件包。系统的开源性使其具有良好的拓展性,一方面,为众多移动应用开发者提供了良好的系统性平台,有利于移动应用的集合;另一方面,终端厂商可以针对自身的特殊需要“定制化开发”。与此相比,尽管2010年2月,塞班基本完成开源工作,但由于代码臃肿,用户界面设计缺失,塞班的开源并无实际意义,错失发展良机。

Android操作系统给予了用户跟高的自由度熟悉Android的都清楚用户可以根据自己的喜好来设置手机界面,Android的应用市场甚至上还有各式各样的启动器来供用户自己选择,让自己的手机与众不同。例如用户要是喜欢HTC的操作界面便马上可以在应用市场上找到,甚至还能模仿IOS的界面。相比于IOS操作系统,Iphone手机只有一成不变的手机界面,不能对其进行更改。

我们认为,安卓在全球市场的成长壮大,塞班市场份额不断下跌已成不争事实。安卓操作系统发展迅猛主要得益于免费、开源和良好产业运作策略,这三点为安卓在智能手机市场赢得更多的发展机遇。系统的免费让更多的厂商加入,推2

动了份额的上升;代码的开源让更多的开发者进入应用开发;应用的丰富吸引了更多用户选择,这也是谷歌值得众多厂商学习的地方。此外,谷歌通过OHA联合众多厂商进行系统研发,不断更新版本,目前以推出十多个Android版本,将系统应用推广到更多的终端产品中,确保用户体验持续改善。

3

2系统分析

2.1 研究目标

(1) 了解Android应用程序的设计和开发过程;

(2) 使用多种组件进行Android 平台手机天气预报软件的开发。

本软件是基于Eclipse的开发环境,依托webService服务气象数据建立气象信息,开发出了针对Android平台的手机天气预报系统。

2.2 需求分析

本程序主界面采用ViewFlipper视图,实现Android界面滑动效果,主界面分为四个一面,第一页显示用户选定的首要城市的当天天气详细情况,以及未来三天天气的概况,并提供手动更新天气的按钮;第二页是城市设置页面,用户可以在设定最多9个城市作为用户关注的城市,并提供当天天气概览,用户可以在这里设定选择已经关注的城市作为首要关注城市;第三页是用户选定的首要城市天气情况的各种生活指数,包括晾晒指数、旅游指数、路况指数、舒适度指数、空气污染指数、紫外线指数,用户可以根据各种生活指数安排自己日常生活;第四页用一个可以上下滑动的ScrollView(卷轴视图)显示用户选定的首要城市的城市简介。

系统提供定时更新功能,根据用户选择可以设置每天天气自动更新的起始时间及更新时间间隔。

2.3 性能分析

Android是一个多任务操作系统,最近运行过的程序都常驻后台,而在内存管理上则由系统选择性的自动杀掉占用内存的近期非活跃进程,而不是关闭程序,当程序再次显示时速度更快。程序采用ViewFlipper实现多个页面的滑动切换,四个视图页面封装在一个view中,不显示的页面有ViewFlipper封装的资源收缩方法保留最基本的数据,节约内存,滑动时只需要还原子view即可,与4

Activity的切换相比既节约资源,又加快了界面切换的速度。因为Activity的切换涉及到Activity的创建与销毁。

5

3程序设计

3.1 用户界面设计

根据需求分析可以知道,应用程序应包含四个主要的用户界面,以及几个辅助页面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。

在城市天气页面,如图3,分为上中下三个部分,上面部分显示用户设定的首要城市的城市名、当日温度区间、天气情况、风力大小、湿度、紫外线强度,实时温度及实时天气的图标。中间是三个自定义View,显示未来三天的天气情况,每个View中都包括日期、星期、天气图标、最高温度、最低温度。底部显示了当前天气的更新时间,及手动更新天气的按钮。

图2 城市天气

添加城市页面,如图4,由一个GridView构成,GridView中有9个相同的view作为GridView的item,供用户选择关注的城市。每个item中显示所选城市的天气概览,包括编号、城市名称、天气图标、天气状况、温度及更新时间。

6

图3 选择城市

生活指数页面,如图5,生活指数页面,通过下拉列表选择不同的生活指数种类,显示各种生活指数,包括:晾晒指数、旅游指数、路况指数、舒适度指数、空气污染指数、紫外线指数。

7

图4 生活指数

城市介绍页面,如图6,ScrollView(卷轴视图)显示用户选定的首要城市的城市简介。

图5 城市简介

8

3.2 程序模块设计

从功能需求上分析可以看出,整个应用程序应划分为3个模块,分别是用户界面模块、后台控制模块和基础功能模块。后台控制模块更具用户界面的需求调用基础功能模块的各项功能得到用户界面需要的数据并返回到用户界面。基础工具模块提供天气查询、网络状况检查、定时器功能 、自定义风格dialog、数据存取、数据处理6个功能模块;后台控制模块分为城市管理、dialog调用两个部分;用户界面模块包括,城市天气、城市管理、生活指数、城市简介、添加城市、定时设置、操作提示几个部分组成。

图6 用户界面

图7 基础工程模块

9

4程序开发

4.1 文件结构与用途

在程序开发阶段,确定“基于Android平台手机天气预报软件”的工程名为Weather,据程序模块设计的内容,建立Weather工程。Weather工程源代码的结构如图9所示。

图8 项目结构

以下对项目Weather下各资源包进行介绍。src文件夹中包含项目大部分的代码;gen是Android项目自动生成的文件夹,其中由系统自动生成的为系统中每一个资源分配了一个资源编号,包括图片、string文件中定义的字符串以及layout中的布局文件和anim中的样式文件,都会在中自动生成一个ID,方便在其他地方调用。Android 2.2及Android Dependencies是项目需要的jar包;bin文件夹中保存了项目运行后的可执行文件即apk文件;res下的anim文件夹中自定义界面切换样式,drawable-hdpi、drawable-ldpi、drawable-mdpi三个文件夹中分别存放像素高、低、中的图片资源,三个文件夹中可以存放文件名相同的图片,但系统在中只生成一个资源id,调用到这个Id是系统会根据用户手机屏幕像素情况自动选择适应屏幕的图片,layout10

中定义了界面布局的xml文件,values中存放的是字符串定义文件和自定义的样式文件;中配置了系统的相关参数,以及所有的Activity、service声明。

下面对Weather项目的文件用途进行说明:

表1 Weather工程的文件用途说明

包 名 称

e

e

e

e

文 件 名

表2 自定义View及Adapter

包 名 称

文 件 名 说 明

说 明

菜单中“关于”选项对应的Activity。

定义菜单

创建城市添加到城市列表中服务

创建程序中弹出的Dialog服务

用户偏好设置服务

查询天气服务

网络检查

字节处理

字符串处理

添加城市的activity

欢迎界面

定时设置界面

天气预报界面

自定义adapter用于自动适配下拉输入框

自定义城市列表adapter

西定义view,用于显示城市天气

自定义dialog

自定义滑动监听

自定义ListView

自定义TextView

自定义adapter用于城市管理

Android的资源文件保存在/res的子目录中。其中、/res/anim目录中保存11

的是产生动画效果的XML文件,/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的文件,/res/xml目录中保存的是XML格式的数据文件。所有在程序开发阶段可以被调用的资源都保存在这些目录中,具体每个资源文件的用途可以参考表3:

表3 资源文件名称与用途

资源目录 文 件

push_left_

anim

push_left_

push_right_

push_right_

drawable 略

city_

city_

city_

city_

dlg_

layout

dlg_tips_one_

option_

view_

weather_

values tips_

说 明

画面转换位置移动动画效果(左进)

画面转换位置移动动画效果(左出)

画面转换位置移动动画效果(右进)

画面转换位置移动动画效果(右出)

这个文件夹里是工程里所用的图片,如有表示天气状况、背景等,此处不赘述。

关于界面的布局

生活指数的布局

城市介绍的布局

城市管理的布局

城市天气的布局

弹出选择列表的布局

单按钮提示dialog的布局

欢迎界面的布局

添加城市dialog中选择城市的布局

自动更新天气设定的布局

天气预报滑动容器布局

天气概览的布局

城市管理中itme的布局

自定义Dialog的样式定义

提示对话框的样式定义

保存字符串的XML的文件

12

4.2 数据存储

本程序数据存储用到Android数据存储的两种方式Shared Preferences和Files。

4.2.1 Shared Preferences

Shared Preferences用于保存用户的偏好设置,比如首要城市、关注城市、定时更新信息等。下面用保存首要城市名称和取出首要城市名称两个例子介绍Shared Preferences的用法。

(1) 保存首要城市名称的代码:

/**保存首要城市名称,即第一页显示天气的城市

*

* @param primaryCity

*/

public void setPrimaryCity(String primaryCity){

SharedPreferences preferences =

redPreferences("weather",_PRIVATE);

}

首先用getSharedPreferences方法得到一个SharedPreferences对象,文件名为weather,权限为MODE_PRIVATE。获取SharedPreferences对象时有三种权限可以选择, MODE_PRIVATE、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE;MODE_PRIVATE表示创建的文件只能由调用的应用程序访问,即只能被本程序访问;MODE_WORLD_READABLE表示创建的文件让所有其他应用程序有读权限;MODE_WORLD_WRITEABLE表示创建的文件让所有其他应用程序有写权限。用getSharedPreferences方法创建的文件,系统会自动保存到用户安装程序的/data/data/shaared_pref文件夹下。

然后用创建的SharedPreferences对象获取SharedPreferences的Editor对象,再用Editor的put方法向weather文件中写入用户偏好设置,最后用13

editor= ();

ing("primaryCity", primaryCity);

();

Editor的commit方法保存写入的用户偏好信息。

(2)取出首要城市名称的代码:

/**取出首要城市的名称

* @return 首要城市的名称,不存在则返回空串

*/

public String getPrimaryCity(){

SharedPreferences preferences = redPreferences("weather",

_PRIVATE);

}

读取用户偏好信息时要用与保存用户偏好信息时同样的参数获取SharedPreferences对象,用SharedPreferences的对象调用get方法即可得到设置进去的用户偏好信息。

return ing("primaryCity", "");

4.2.2 Files

Files数据储存方式主要用来天气信息。本程序调用webService获取天气信息,该webService调用采用soap2协议,通过标准xml文件流交互信息,得到的天气预报信息为一个文件输入流对象,保存后为一个xml文件。由于天气预报信息实时性比较强,信息结构复杂;将xml文件解析处理后保存到数据库中可以以后一次也用不上,所以本程序采用文件方式保存天气信息,Android系统中集成pull解析器,pull解析器是一个功能强大并且使用方便的xml解析器。

下面通过保存天气信息文件和读取天气文件介绍Files和pull解析器的用法。

(1)保存天气信息

/** 保存天气到xml文件中

* @param weatherInfo 天气情况的输入流对象

* @param cityName 城市名,这将用作文件名

* @throws IOException

*/

public void saveWeatherInfo(InputStream weatherInfo,String cityName) throws

14

IOException {

FileOutputStream fos =

leOutput(cityName,_PRIVATE);

}

Files的方保存文件先用Context对象打开一个文件输出流,与用户偏好设置一样,我们可以设定这个文件的权限,在这里我就不再次说明,将获取到的输入流写到输出流中,关闭输出流天气信息就保存成功了。

(2)获取天气信息(包括解析天气信息)

/**解析天气预报的xml文件

* @param cityName 需要解析城市的名称

* @return 天气情况

* @throws Exception

*/

byte[] buffer = new byte[1024];

int len = 0;

while((len = (buffer))!= -1){

}

();

(buffer, 0, len);

public ArrayList parseWeatherXML(String cityName) throws

Exception{

ArrayList weatherInfos = new ArrayList();

FileInputStream fis = leInput(cityName);

XmlPullParser pullParser = lParser();

ut(fis, "UTF-8");

int event = ntType();

while(event != _DOCUMENT){

switch (event) {

case _TAG:

15

}

}

}

if("string".equals(e())){

}

break;

//n(xt());

(xt());

event = ();

return weatherInfos;

通过要查询的天气的城市名称获取到文件输入流,然后再同过pull解析器解析xml文件,得到天气信息字符串,用ArrayList保存并传出。

以下是webService上得到的天气信息

(3)孝感.xml

湖北

孝感

57482

2013-1-1 16:11:23

-3℃/10℃

1月1日 多云

无持续风向微风

今日天气实况:气温:11℃;风向/风力:南风 2级;湿度:40%;空气质量:中;紫外线强度:最弱

穿衣指数:暂缺。 过敏指数:天气条件极不易诱发过敏,可放心外出,享16

受生活。 运动指数:天气较好,但考虑天气寒冷,推荐您进行室内运动,若在户外运动请注意保暖并做好准备活动。 洗车指数:较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。 晾晒指数:天气不错,午后温暖的阳光仍能满足你驱潮消霉杀菌的晾晒需求。 旅游指数:多云,有时云会遮挡住阳光,但丝毫不会影响您出行的心情。温度适宜又有微风相伴,很适宜旅游。

路况指数:天气较好,路面比较干燥,路况较好。 舒适度指数:天气较好,早晚会感觉偏凉,午后舒适、宜人。 空气污染指数:气象条件对空气污染物稀释、扩散和清除无明显影响,易感人群应适当减少室外活动时间。 紫外线指数:属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。

-1℃/3℃

1月2日 多云转阴

北风3-4级

-1℃/1℃

1月3日 阴转雨夹雪

北风3-4级转无持续风向微风

位于湖北省东北部,南临省会武汉市,北与河南、随州交界,西接天门、仙桃、京山等县市,•东连黄冈市的红安县和武汉市的黄陂区。因东汉孝子董永行孝感天而得名。孝感市是改革开放中发展起来的新兴中等城市,辖孝南区、汉川市、应城市、安陆市和云梦县、大悟县、孝昌县;国土面积11560平方公里,总人口580万人。孝感是楚文化的重要发祥地之一。周代贰国、轸国、郧国都建都于此。秦代竹简、秦汉漆器、东汉陶楼等国宝文物和楚王城等遗址展示了孝感绚丽多财的古代文化。剪纸、皮影、膏塑等传统文化艺术源源流长。孝感市属亚热带大陆17

性季风气候,四季分明,雨量充沛,温暖湿润,光照充足。全年主导风向为东南风,年均气温在15.5-16.5°C之间。景观:大洪山、白水寺、白云泉、石刻题记、董永故里、鄂豫边区革命烈士陵园、高挂三潭、擂鼓墩古墓群。

从上面天气信息xml文件看出,有用的天气信息都在标签中,我们用pull解析器不断解析,并保存string标签中的内容便可以得到天气信息。

while(event != _DOCUMENT){

4.3 主要功能代码

本项目使用的代码较多,本部分对天气预报项目中核心代码进行解析,这部分代码能够完成天气预报的查询与显示的基本功能,另外一部分代码则实现的了能够与用户更好的交互,增加应用的界面美观的功能。

4.3.1 获取天气数据

从/提供的Web Service中获取的天气数据,数据的获取地址为:/WebServices/

代码如下:

18

}

switch (event) {

case _TAG:

}

event = ();

if("string".equals(e())){

}

break;

(xt());

/**通过城市名称查询天气情况,并调用保存天气函数

*

* @param cityName 城市名

* @return 获取成功则返回true,否则false

* @throws Exception

*/

public boolean queryWeather(String cityName) throws Exception{

final String WEATHER_CITY =

"/WebServices/";

String soap = readSoap();

soap = eAll("$cityNameaa", cityName);

byte [] entity = es();

String path = WEATHER_CITY;

HttpURLConnection conn = (HttpURLConnection) new

URL(path).openConnection();

nectTimeout(5000);

uestMethod("POST");

utput(true);

uestProperty("Content-Type", "application/soap+xml;

charset=utf-8");

uestProperty("Content-Length", f());

putStream().write(entity);

if(ponseCode() == 200){

}

return false;

19

//保存天气信息到xml文件

saveWeatherInfo(utStream(),cityName);

return true;

}

readSoap方法

private static String readSoap() throws Exception {

InputStream inputStream =

ssLoader().getResourceAsStream("");

}

通过readSoap方法读取src下文件,得到访问天气预报的webService的标准天气交互格式,查询天气时将xml中指定的城市名称换成实际要查询的天气预报的城市名,然后提交查询。然后获取到天气信息的输入流对象。

4.3.2 网络检查

public static boolean ckeck(Context context) {

}

ConnectivityManager con = (ConnectivityManager) context

.getSystemService(TIVITY_SERVICE);

byte[] data = (inputStream);

return new String(data);

NetworkInfo networkinfo = iveNetworkInfo();

if (networkinfo == null || !ected()) {

// 当前网络不可用

}

return true;

return false;

检查设备当前是否接入网络,使用此功能需要在中添加访访问权限:

20

android:name="_NETWORK_STATE" />

4.3.3 定时更新时间

本程序一启动就会启动就会查看用户偏好设置中用户是否启用自动更新天气服务,若启用,程序会启动TimeService这个后台服务,按照用户设置进行天气信息更新。核心代码如下:

AlarmManager alarmManager =

(AlarmManager)getSystemService(_SERVICE);

(_WAKEUP, now + updateMilis,

pendingIntent);

至此,后台服务介绍完毕,最后还需要在文件中注册后台服务。

4.3.4 ViewFlipper手势监听

七彩天气主界面的Activity实现了OnGestureListener接口,下面onFling方法就是OnGestureListener中的一个方法,该方法实现了viewFlipper对滑动手势的监听,并完成滑动切换效果。onFling中两个MotionEvent参数分别是用户做滑动手势时,触屏的起点位置和终点位置,通过getX()方法取出触点的X轴坐标,计算终点X轴坐标与起点X轴坐标,差值大于100dp,则认为用户使用滑动手势,通过差值的正负来判断用户需要向左滑动还是向右滑动,如果差值为正则从左向右滑动,反之从右向左滑动。

@Override

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

float velocityY) {

if (() - () > 100) { // 从左向右滑动(左进右出)

if(ping()){//如果ViewFlipper正在滑动,则不划动到下一页,没有实现

21

}

n("ping");

return true;

Animation rInAnim =

imation(,

_right_in); // 向右滑动左侧进入的渐变效果(alpha 0.1 -> 1.0)

Animation rOutAnim =

imation(,

_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)

nimation(rInAnim);

Animation(rOutAnim);

evious();

return true;

} else if (() - () < -100) { // 从右向左滑动(右进左出)

if(ping()){//如果ViewFlipper正在滑动,则不划动到下一页

}

Animation lInAnim =

return true;

imation(,

_left_in); // 向左滑动左侧进入的渐变效果(alpha

0.1 -> 1.0)

Animation lOutAnim =

imation(,

_left_out); // 向左滑动右侧滑出的渐变效果(alpha 1.0 -> 0.1)

nimation(lInAnim);

Animation(lOutAnim);

22

}

}

xt();

return true;

return true;

4.3.5 城市管理中城市点击事件

城市管理中采用GridView以网格形式展现给用户9个城市管理区域,用户在这9个区域中可以自由添加或删除关注的城市。GridViewItemClickListener中写了当GridView中某一个itme被点击时所做出想响应。当用户点击的位置对应了一个用户已经关注的城市(即触点在“+”前面),程序会先将本城市设定为首要城市,然后发送UI更新消息,更新城市天气界面,最后将界面焦点自动定位到城市天气页面;如果点击位置对应的是“+”,则弹出添加城市对话框;如果点击位置在“+”之后,程序不会响应这个事件。

class GridViewItemClickListener implements OnItemClickListener{

public void onItemClick(AdapterView arg0, View arg1, int position,

long arg3) {

n("GridViewItemClickListener");

preferencesService = new PreferencesService(w_context);

//得出当前已经设定的城市数目

setCtiyNum = yNum();

//如果点击的位置小于当前设定城市的数目,跳转到position指定的城市天气界面

String selectCityName =

if(position < setCtiyNum){

//添加代码,跳到城市天气那一页,并设定首要城市为选定的城yNameByCityNum(position+1);

primaryCity = selectCityName;

23

maryCity(selectCityName);

isParseWeather = getWeatherFromXML();//尝试解析primaryCity天气情况

if(!isParseWeather){//如果不存在天气文件,更新天气,更新天气完毕发送刷新消息

}

//如果点击的位置等于当前设定城市的数目,跳转到添加城市界面

else if(position == setCtiyNum){

AddCityDialog showDialog = new

}

//解析成功,发送更新第一个界面

Message msg = new Message();

= 1;

ssage(msg);

//跳到第一页

playedChild(0);

refreshWeather(primaryCity);

AddCityDialog(w_context,myHandler); //创建类对象

}

Dialog(ADD);//创建需要的dialog

}//如果点击的位置大于当前设定城市的数目,不作处理

}

4.4 主要界面结构布局代码

在用户界面设计上,采用了ViewFlipper框架结构,提供直观的交互操作以及体验良好的滑动效果。

24

4.4.1 ViewFlipper框架结构

ViewFlipper中定义了四个界面分别是城市天气、城市管理、生活指数、城市介绍,这四个界面是与用户交互天气信息最主要的界面。下面是的布局文件代码。

view_

android:id = "@+id/myViewFlipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/bg_weather">

android:id="@+id/weaehers"

layout="@layout/city_weather" />

android:id="@+id/citySetting"

layout="@layout/city_setting" />

android:id="@+id/environment"

layout="@layout/city_environment" />

android:id="@+id/cityIntro"

layout="@layout/city_intro" />

4.4.2 城市管理界面

城市管理界面以一个GridView显示用户已经关注的城市,没有关注的城市用空白表示,下面是城市管理界面布局文件的主要代码:

city_

25

android:id="@+id/select_city"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

android:horizontalSpacing="10dp"

android:numColumns="3"

android:verticalSpacing="18dp"

android:columnWidth="120dp">

4.4.3 生活指数

用户可以用选择列表选自自己关心的生活指数信息,下面是生活指数页面布局文件主要部分。

city_

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/Spinner"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

26

android:layout_alignParentRight="true" />

android:id="@+id/CityLiving"

android:layout_marginTop="10dp"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textSize="16dp" />

android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:src="@drawable/chenlian" />

4.4.4 城市简介

城市简介定义了一个ScrollView(卷轴视图)展现城市简介信息,ScrollView能够根据城市简介的内容多少自动收缩,始终保持展现在用户眼前的事是一屏,当城市简介内容超过一屏时,视图将以卷轴方式显示内容,保持界面美观。

city_

android:id="@+id/cityInfoScrollView"

android:layout_marginTop="8dp"

android:layout_marginBottom="20dp"

android:layout_width="fill_parent"

android:layout_height="wrap_content">

27

android:id="@+id/CityInfo"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textSize="16dp" />

28

5系统测试

至此已经完成了Weather工程的代码编写工作,在这一章节对Weather工程进行测试,步骤及结果如下:

(1) 将软件安装到手机上,点击weather启动程序,程序启动后,首次使用本程序会弹出添加城市对话框。

图9 添加城市界面

(2) 通过输入框输入城市名称或直接点击热门城市,在这里我输入“孝感”,设定关注城市后,如果手机接入网络,则会自动加载天气预报。

29

图10城市天气界面

(3) 用鼠标滑动屏幕,将焦点切换到“城市介绍”页面

图11 城市介绍界面

(4)

用鼠标滑动屏幕,将焦点切换到“生活指数”页面,通过下拉列表30

查看关心的生活指数,这里我查看“空气指数”

图12 生活指数界面

(5) 用鼠标滑动屏幕,将焦点切换到“城市管理”页面,目前只有孝感一个城市,我们可以点击加号弹出添加城市的对话框,然后添加城市,由于此时添加的城市不是首要关注城市,所以不会自动加载天气信息。

31

图13 城市管理界面

(6) 点击“北京”可以将北京设为首要关注城市,程序会自动加载首要关注城市的天气信息(当然如果以前加载过该城市的天气信息,系统不会再次自动加载),并将界面焦点自动滑动到“城市天气”界面

32

图14 城市天气界面

(7) 用鼠标滑动屏幕,将焦点切换到“城市管理”页面,长按“北京”的那个item方框,会弹出城市操作对话框,可以对该城市进行“更新天气”、“更换城市”、“删除城市”操作。

图15 城市操作界面

(8) 这里我点击“删除城市”会弹出提示对话框,点击“确定”删除城市,点击“取消”取消删除城市。这里点击“确定”。

33

图16 删除城市提示界面

(9) 由于之前“北京”被设定为首要关注城市,被删除时,系统会自动把排在第一的“孝感”设定为首要城市

图17 删除城市后跳转到城市天气界面

34

(10) 点击menu按钮弹出菜单,菜单中有“设置”、“关于”、“退出”三个选项,“设置”可进行自动更新设定,“关于”显示本程序及作者相关信息,“退出”将退出程序。这里点击“设置”,弹出的自动更新设置对话框可以设定程序自动更新天气。

图18 定时更新设置界面

35

总结

经过几个月的努力,基于Android平台手机气象软件终于完成了。在做这个毕业设计之前,我自学了一段时间的Android应用程序开发,对常用控件、Android四大组件及Activity生命周期有一定了解。当我真正去完成这个毕业设计时,我发现我之前自学的东西远远不够完成这个天气预报项目,但是我并不灰心,设计好软件开发流程后,我分块开发软件,并针对这块需要的知识进行集中学习,将以前所学的分散的、孤立的知识点融合在一起,并学会如何去处理不同控件组合到一起后产生的新问题,并记录这些问题的处理方式,以便日后查看。

在这个过程中,我学会了很多知识,比如ViewFlipper、Broadcast以及Broadcast Receive等高级组件的使用,同时对Android应用开发基础知识重新进行了一次系统学习,使我对Android应用开发基本知识有了更进一步的理解。在完成这个毕业设计的时候,我遇到了很多困难,由于我的Android是自学的,对知识掌握不够全面,经常遇到一些无从下手的问题,这让我学到更多,当我遇到问题时,我首先会到网络上查看能够帮助自己的信息,如果百度解决不了问题,我会在我加的几个Android技术讨论群中寻求帮助,与他们讨论问题产生的原因及解决方式,深入去了解他们的运行机制,这又让我结识了一些Android技术方面的朋友,体会到了互帮互助的精神。这是我觉得在本次天气预报开发中学到的最受益的东西。

虽然,这个软件代码的健壮行还目前运行良好,但是我认为很差,在整个工程的构思方面也不足,用户操作界面还不够灵活,这些问题还需要今后逐一解决。与此同时,这个软件还可以进一步扩展,例如“关注城市新闻推送”、“生活百宝箱”等,使功能更加强大,带给用户更好的体验与生活的便捷。

36

参考文献

[1] 靳岩,姚尚朗. Google Android 开发入门与实战.人民邮电出版社

[2] 景保玉.2010中国移动应用开发现状与趋势大调查,2011年01月12日

[3] Michael . 轻松搞定XML 林嘉胜译 2001年01月08日

[4](英)Herbert Schildt Java参考大全(J2SE 5 Edition),北京:清华大学出版社

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

[6] 杨丰盛.Android应用开发揭秘.北京:机械工业出版社,2010年1月

[7] Zhu Tingting,The Synthesis of the Application Softwares Based on Android

Operating System, Computer & Telecommunication,2011年 01期 ,23-25

[8] 杜艳绥. 基于Android平台架构应用程序开发研究[J]电脑编程技巧与维护, 2013,

(06) .

37

致 谢

本课题的设计和论文撰写过程中,我的指导老师XX老师给于了极大的帮助,为我提供了大量的相关资料。在完成课题设计的过程中,老师在总体设计思想上给予了许多重要的实际指导,拓展了我的思路,使得我得以完成了任务。在此,我对焦家林老师的指导表示衷心的感谢。

同时,我也衷心的感谢XX学校四年来对我的精心栽培,良好的校园环境、精良的师资队伍、浓厚的校园文化都让我深深怀念,都为我进入社会提供了莫大的帮助。

毕业设计(论文)原创性声明和使用授权说明

原创性声明

本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作 者 签 名: 日 期:

指导教师签名: 日 期:

使用授权说明

本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名: 日 期:

学位论文原创性声明

本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。

作者签名: 日期: 年 月 日

学位论文版权使用授权书

本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

涉密论文按学校规定处理。

作者签名: 日期: 年 月 日

导师签名: 日期: 年 月 日

指导教师评阅书

指导教师评价:

一、撰写(设计)过程

1、学生在论文(设计)过程中的治学态度、工作精神

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、学生掌握专业知识、技能的扎实程度

□ 优 □ 良 □ 中 □ 及格 □ 不及格

3、学生综合运用所学知识和专业技能分析和解决问题的能力

□ 优 □ 良 □ 中 □ 及格 □ 不及格

4、研究方法的科学性;技术线路的可行性;设计方案的合理性

□ 优 □ 良 □ 中 □ 及格 □ 不及格

5、完成毕业论文(设计)期间的出勤情况

□ 优 □ 良 □ 中 □ 及格 □ 不及格

二、论文(设计)质量

1、论文(设计)的整体结构是否符合撰写规范?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、是否完成指定的论文(设计)任务(包括装订及附件)?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

三、论文(设计)水平

1、论文(设计)的理论意义或对解决实际问题的指导意义

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、论文的观念是否有新意?设计是否有创意?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

3、论文(设计说明书)所体现的整体水平

□ 优 □ 良 □ 中 □ 及格 □ 不及格

建议成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格

(在所选等级前的□内画“√”)

指导教师: (签名) 单位: (盖章)

年 月 日

评阅教师评阅书

评阅教师评价:

一、论文(设计)质量

1、论文(设计)的整体结构是否符合撰写规范?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、是否完成指定的论文(设计)任务(包括装订及附件)?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

二、论文(设计)水平

1、论文(设计)的理论意义或对解决实际问题的指导意义

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、论文的观念是否有新意?设计是否有创意?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

3、论文(设计说明书)所体现的整体水平

□ 优 □ 良 □ 中 □ 及格 □ 不及格

建议成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格

(在所选等级前的□内画“√”)

评阅教师: (签名) 单位: (盖章)

年 月 日

教研室(或答辩小组)及教学系意见

教研室(或答辩小组)评价:

一、答辩过程

1、毕业论文(设计)的基本要点和见解的叙述情况

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、对答辩问题的反应、理解、表达情况

□ 优 □ 良 □ 中 □ 及格 □ 不及格

3、学生答辩过程中的精神状态

□ 优 □ 良 □ 中 □ 及格 □ 不及格

二、论文(设计)质量

1、论文(设计)的整体结构是否符合撰写规范?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、是否完成指定的论文(设计)任务(包括装订及附件)?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

三、论文(设计)水平

1、论文(设计)的理论意义或对解决实际问题的指导意义

□ 优 □ 良 □ 中 □ 及格 □ 不及格

2、论文的观念是否有新意?设计是否有创意?

□ 优 □ 良 □ 中 □ 及格 □ 不及格

3、论文(设计说明书)所体现的整体水平

□ 优 □ 良 □ 中 □ 及格 □ 不及格

评定成绩:□ 优 □ 良 □ 中 □ 及格 □ 不及格

(在所选等级前的□内画“√”)

教研室主任(或答辩小组组长): (签名)

年 月 日

教学系意见:

系主任: (签名)

年 月 日

学位论文原创性声明

本人郑重声明:所呈交的学位论文,是本人在导师的指导下进行的研究工作所取得的成果。尽我所知,除文中已经特别注明引用的内容和致谢的地方外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明并表示感谢。本人完全意识到本声明的法律结果由本人承担。

学位论文作者(本人签名): 年 月 日

学位论文出版授权书

本人及导师完全同意《中国博士学位论文全文数据库出版章程》、《中国优秀硕士学位论文全文数据库出版章程》(以下简称“章程”),愿意将本人的学位论文提交“中国学术期刊(光盘版)电子杂志社”在《中国博士学位论文全文数据库》、《中国优秀硕士学位论文全文数据库》中全文发表和以电子、网络形式公开出版,并同意编入****《中国知识资源总库》,在《中国博硕士学位论文评价数据库》中使用和在互联网上传播,同意按“章程”规定享受相关权益。

论文密级:

□公开 □保密(___年__月至__年__月)(保密的学位论文在解密后应遵守此协议)

作者签名:_______ 导师签名:_______

_______年_____月_____日

_______年_____月_____日


本文标签: 城市 天气 用户 信息