软 件 设 计 报 告
课程名称:
移动计算技术
设计题目:
天气预报程序
院 系: 计算机科学与工程学院
专 业:
软件工程
班
级:
学 号:
姓 名:
指导教师:
设计地点:
殷旭东
N6-101
开课时间: 2011 至 2012 学年第 1 学期
常熟理工学院计算机科学与工程学院 制
- 3 -
学生姓名
成绩
评语:
指导教师(签名)
年 月 日
4
目录
1. 设计目 的和任务.........................................................................................1
2. 开发环境.....................................................................................................1
2.1 硬件环境..............................................................................................1
2.2 软件环境..............................................................................................1
3.设计题目.......................................................................................................1
3.1 题目名称..............................................................................................1
3.2 题目详细描述........................................................................................1
3.3 功能要求...............................................................................................1
4. 相关技术及知识点........................................................................................1
4.1 Andriod 用户界面......................................................................................1
4.2 菜 单 .....................................................................................2
5. 设计与实现...................................................................................................2
5.1 程 序 启 动 界 面..................................................................................2
5.2 获取 天气信 息.....................................................................................3
5.3 设置并保存天气信息................................................................................5
5.4 WeatherActivity.java...................................................................................7
5.5 同时查询多个城市..................................................................................10
6. 总结.............................................................................................................12
7. 参 考 资 料……….....................................................…………………….....12
5
《移动计算技术》软件设计报告
1. 设计目的和任务
通过学习,掌握 Android 移动应用程序开发的基本技术,能开发具有系统标准界面的实用程序,
或简单的小游戏,以及简单网络程序,为以后从事该方向深入学习研究做好准备。
2. 开发环境
2.1 硬件环境
CPU:PentiumⅢ733 或以上;内存:128MB 或以上容量;
硬盘:至少 100MB 剩余空间。
2.2 软件环境
装 有 Eclipse、JDK、 Android SDK 的 计 算机
3. 设计题目
3.1 题目名称
天 气 预报 程 序
3.2 题目详细描述
设计一个能实时访问天气预报信息的实用程序,城市名称以列表形式出现,供用户选择,
能关注的多个城市。可在主界面上对这些城市用< >切换,列表形式显示 2-6 天的天气数据,加
入天气图标(晴、雨、雪、阴、多云等)。
3.3 功能要求
(1) 采用选择省份、城市列表的形式,代替输入城市名的方式。
(2) 能设置关注的多个城市。可在主界面上对这些城市用< >切换。
(3) 列表形式显示 2-6 天的天气数据,加入天气图标(晴、雨、雪、阴、多云等)。
4.相关技术及知识点
4.1 Android 用户界面
Android 系 统 的界 面 控 件 分 为定 制 控 件 和 系统 控 件 。
定 制 控件 是 用 户 独 立开 发 的 控 件 ,或 通 过 继 承 并修 改 系 统 控 件后 所 产 生 的 新控 件 。
能 够 为用 户 提 供 特 殊的 功 能 或 与 众不 同 的 显 示 需求 方 式 。
系 统 控件 是 Android 系 统 提供 给 用 户 已 经封 装 的 界 面 控件 。提 供 在应 用 程 序 开 发过
程 中 常 见 功 能 控 件 。 系 统 控 件 更 有 利 于 帮 助 用 户 进 行 快 速 开 发 , 同 时 能 够 使 Android
系 统 中应 用 程 序 的 界面 保 持 一 致 性 。常 见 的系 统 控 件 包 括 TextView、EditText、Button、
ImageButton、 Checkbox、RadioButton、 Spinner、 ListView 和 TabHost
( 1) TextView 是 一 种用 于 显 示 字 符串 的 控 件
( 2) Button 是 一 种按 钮 控 件 , 用户 能 够 在 该 控件 上 点 击 , 并后 引 发 相 应 的事 件 处
理 函 数
- 1 -
( 3) ImageButton 用 以 实现 能 够 显 示 图像 功 能 的 控 件按 钮
( 4) CheckBox 是 一 个同 时 可 以 选 择多 个 选 项 的 控件
( 5) RadioButton 则 是 仅可 以 选 择 一 个选 项 的 控 件 , RadioGroup 是 RadioButton
的 承 载体 , 程 序 运 行时 不 可 见 , 应用 程 序 中 可 能包 含 一 个 或 多个 RadioGroup, 一个
RadioGroup 包 含 多个 RadioButton,在 每 个 RadioGroup 中 ,用 户 仅能 够 选 择 其 中一 个
RadioButton
( 6) Spinner 是 一 种 能 够 从 多 个 选 项 中 选 一 选 项 的 控 件 , 类 似 于 桌 面 程 序 的 组 合
框 ( ComboBox), 但 没有 组 合 框 的 下拉 菜 单 , 而 是使 用 浮 动 菜 单为 用 户 提 供 选择
4.2 菜单
菜 单 是 应 用 程 序 中 非 常 重 要 的 组 成 部 分 , 能 够 在 不 占 用 界 面 空 间 的 前 提 下 , 为 应
用 程 序提 供 了 统 一 的功 能 和 设 置 界面 , 并 为 程 序开 发 人 员 提 供了 易 于 使 用 的编 程 接 口
Android 系 统 支持 三 种 菜 单
选 项 菜单(Option Menu):选 项 菜单 是 一 种 经 常被 使 用 的 Android 系 统 菜单 ;打
开 方 式 : 通 过 “菜 单 键 ”( MENU key) 打 开 ; 选 项 菜 单 分 为 图 标 菜 单 ( Icon Menu)
和 扩 展菜 单 ( Expanded Menu)
子 菜 单(Submenu):子 菜 单是 能 够 显 示 更加 详 细 信 息 的菜 单 子 项,菜 单 子项 使 用
了 浮 动窗 体 的 显 示 形式 ,能 够 更好 适 应 小 屏 幕的 显 示 方 式 。Android 系 统 的子 菜 单 使
用 非 常灵 活 ,可 以 在选 项 菜 单 或 快捷 菜 单 中 使 用子 菜 单 ,有 利 于将 相 同 或 相 似的 菜 单
子 项 组 织 在 一 起 , 便 于 显 示 和 分 类 ; 子 菜 单 不 支 持 嵌 套 ; 子 菜 单 的 添 加 是 使 用
addSubMenu()函 数 实现
快 捷 菜 单 ( Context Menu): 快 捷 菜 单 同 样 采用 了 动 窗 体 的 显 示 方 式 , 与 子 菜单
的 实 现方 式 相 同 ,但 两 种菜 单 的 启 动 方式 却 截 然 不 同 。启 动 方式 :快 捷 菜单 类 似 于 普
通 桌 面程 序 中 的 “右 键 菜单 ”,当 用 户点 击 界 面 元 素超 过 2 秒 后 ,将 启 动注 册 到 该 界
面 元 素 的 快 捷 菜 单 。 使 用 方 法 : 与 使 用 选 项 菜 单 的 方 法 非 常 相 似 , 需 要 重 载
onCreateContextMenu()函 数 和 onContextItemSelected()函 数
5.设计与实现
项 目 共有 2 个 界 面,WeatherActivity 和 SplashActivity,以 及 4 个 类:GetWeather,
WeatherApplication, WeatherHandler 和 WeatherInfo
5.1 程序启动界面
SplashActivity 用 于 程 序 启 动 时 的 等 待 界 面 , 在 程 序 完 全 启 动 前 显 示 等 待 画 面 , 直
至 程 序启 动 完 毕
2
图 5-1 程 序 启动 等 待 画 面
5.2 获取天气信息
在 GetWeather 中 , 通过 google weather api 获 取 天气 数 据
public void reGetWeatherToApplication(String location)
{
Log.v(TAG, "location = " + location);
SAXFactory = SAXParserFactory.newInstance();
handler = new WeatherHandler();
try
{
parser = SAXFactory.newSAXParser();
xmlReader = parser.getXMLReader();
xmlReader.setContentHandler(handler);
} catch (ParserConfigurationException e)
{
// TODO Auto-generated catch block
3
e.printStackTrace();
} catch (SAXException e)
// TODO Auto-generated catch block
e.printStackTrace();
{
}
try
{
url = new URL("http://www.google.com/ig/api?weather=" + location);
InputStream inst = url.openStream();
ins = new InputStreamReader(inst, "GB2312");
is = new InputSource(ins);
} catch (MalformedURLException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (UnsupportedEncodingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
{
}
try
{
xmlReader.parse(is);
weatherInfos = handler.getLinkedList();
//
printAllInfos();
} catch (IOException e)
{
// TODO Auto-generated catch block
4
e.printStackTrace();
} catch (SAXException e)
{
}
// TODO Auto-generated catch block
e.printStackTrace();
Application app = (WeatherApplication)(context.getApplication());
((WeatherApplication) app).setWeatherInfos(weatherInfos);
}
5.3 设置并保存天气信息
WeatherHandler 使 用 SAX 解 析 文 档 , 创 建 天 气 预 报 数 据 集 , 设 置 并 保 存 天 气 信 息 。
WeatherInfo.java 用 于 存 储 WeatherHandler 类 获 得 的 天 气 情 况 , 并 提 供 get 方 法 , 用 于
读 出 某个 数 据
以 下 代码 用 于 WeatherHandler 中 设 置天 气 信 息
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException
{
/* 若在current_conditions标签内,创建当前天气信息对象 */
if(localName.equals("current_conditions"))
{
}
weatherInfo = new
WeatherInfo();
weatherInfo.setCurrent(true);
Log.v(TAG, "localName = " + localName);
/* 若在forecast_conditions标签内,新增预报天气信息对象 */
else if(localName.equals("forecast_conditions"))
{
}
weatherInfo = new
WeatherInfo();
weatherInfo.setCurrent(false);
Log.v(TAG, "localName = " + localName);
/* 设置天气状况信息 */
else if(localName.equals("condition"))
{
5