1、 目录 摘要 . 1 需求分析 . 2 一、开发背景 . 2 二、项目需求分析 . 2 总体设计 . 2 一、系统规划 . 2 二、系统功能界面 . 3 1. 设置预报城市界面: .3 2天气显示界面: .4 3 Widget 桌面小部件界面: .5 三设计目标 . 6 系统设计 . 6 一、开发及运行环境 . 6 二、数据库设计 . 6 三、主要方法及步骤 . 7 四、主要方法及技术 . 7 主要模块 . 7 一、项目框架 . 7 二、主要功能实现 . 8 1.获取城市码 db_weather.db 数据库文件 .8 2.实现可伸缩性列表的的构建与过滤 . 12 3.GPS 定位功能的实现
2、. 15 4.Widget 窗体小部件的更新 . 18 功能测试 . 19 结论 . 23 摘要 Window 操作系统的诞生成就了微软帝国,同时也造就了 PC 时代的繁荣,然而如今,以 Android 和 iPhone 手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了 PC 时代的丧钟!这也预示着移动互联网时代 (3G)已经来临。 在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的 UI 设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是 Google 的 Android!这也意味着 Google 在移动互联网时代开始抢跑并领跑。 Android 是基于
3、Linux 平台完全开 源的手机操作系统,同时开发语言为Java,这对于 Java 开发的我们是何等的诱人,程序员的技术要与时代同行,因此我选择了以 Android 为平台的手机天气预报系统来作为我的毕业设计,选择手机天气预报系统不仅可以提升技术,同时也很实用,为人们时刻了解天气状况和出行带来了方便。 1 需求分析 一、开发背景 近几年来随着 3G 技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在 Google 和 Android 手机联盟的共同推动下, Android 在众多移动应用开发平台中脱颖而出。 Android 是一个真正意义上的开源智能
4、手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。为顺应潮流,本设计旨在搭载 Android 的移动设备上运行,实现天气状况的实时动态更新与显示,方便人们的出行与生活。 二、项目需求分析 根据功能的需求,分析此项目的主要功能应具备以下几点: 1. 精确查询定位全国各地城市未来几天内的实时天气状况 2. 系统要具的实用性,符合用户查看信息习惯,界面设计优美 3. 系统要具有稳定性,且在一定程度上节省流量的开销 总体设计 一、系统规划 由上述的需求,现将系统分为三大模块:天气显示界面模块、预报城市设置模块与 Widget 桌面小部件模块。各系统模块功能如下: 1). 天气显示界面
5、模块 显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用户可通过按菜单键来显示菜单更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城市界面来更换预报城市。 2). 预报城市设置模块 由自动设置预报城市与手动设置二部分组成,自动设置实现 GPS 定位功能,自动确定当前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市当三天内的天气状况; 第一次运行时自动跳到该界面。 3). Widget 桌面小部件模块 为了方便用户实时
6、了解天气状况,特别添加在 Android 系统桌面上显示当前天气与时间的天气小部件,使用户拿起手机的第一时刻就能了解天气,同时当用户单击小部件时,自动跳转至天气显示界面,显示三天内的详细天气。 2 二、系统功能界面 1. 设置预报城市界面: 1.1 当第一次运行程序时,跳转至城市设置界面进行预报城市的选择: 1.2 用户可以通过单击选择 “定位当前城市 ”的方式调用系统 GPS 功能自动定位预报城市: 3 1.3 用户可通过输入框过滤查询当前系统中预存的城市: 2天气显示界面: 2.1 选择了预报城市后,系统跳转至天气显示界面,显示该城市三天内的实时天气 : 4 2.2 在天气界面中用户可通过
7、按菜单键来调出菜单,选择城市,更新天气与更换背景: 3 Widget 桌面小部件界面: 方便用户第一时间了解天气动态,添加 widget 显示功能界面: 5 三设计目标 设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因此针对上述要求,本设计应滿足: 1. 系统能及时的返反馈指定预报城市的天气情况 2. 自动定位用户所在城市,支持 GPS 定位 3. 节省流量开销,规定在指定的时间间隔内才更新天气,其它时段显示缓存的天气 4. 操作方便快捷,使用简单,界面设计美观大方,支持 widget 系统设计 一、开发及运行环境 JDK1.6.10 Eclipse3.5 Andr
8、oid Development Toolkit (ADT) 15.0.0 Android 2.2 及以上 Windows XP 及以上 二、数据库设计 由于在本系统中是通过中央气象 台 的 WebService 提供的 API 访问得到的天气预报,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先通过 Android 的网络访问技术将其缓冲到本地 SQLite 数据库进行保存起来,方便以后的查询,同时节省了流量开销。综上所述在本地建立 db_weather.db 的数据库,其中的表结构如下: 其中只存在两个表 : provices 和 citys C
9、ity 中存在 city_num 用天气的查询,同时还存在外键 province_id 与 provices 表形成 1 对 n 的关系。 6 三、主要方法及步骤 1. 搭建 Android 开发环境,并建立一个 android2.2 版本名为 WeatherSystem 项目 2. 首先编写网络访问代码,访问 http:/ 中央气象站解析得到所有城市码并导出保存得到的 db_weather.db 数据文件 3. 在程序第一次运行时,将 db_weatcher.db 数据库文件导入到应用程序数据库中 4. 建立设置城市界面,读取数据库文件,获取省份,城市以及对应的城市码。 5. 接收用户选择的
10、城市码,访问: http:/ 得到天气信息 6. 解析天气信息,将城市码及天气信息缓冲下来,并为其设置有效时间,方便下次启动时直接得到天气信息,过期则从网上更新 7. 定时由保存的城市码更新天气信息 四、主要方法及技术 1. Android 手机的界面 UI 设计 2. Android 的网络通信 3. Android 的广播 4. GPS 调用解析 5. Widget 小部件编程 6. XML 与 JSON 解析 7. SQLite 数据库操作 8. Android 文件操作 主要模块 一、项目框架 在装有 ADT 插件的 Eclipse 中新建一个名为 WeatherSystem 的 An
11、droid2.2 版本的项目, 项目主要文件结构如下 : WeatherSystem |_src | |_com.weather.app | | |_MainActivity.java | | |_SetCityActivity.java | | |_Update W idge tSe rvice.ja va | | |_WeatherWidget.java | |_p | | |_GPSListAdapter.java | | |_MyListAdpater.java | |_com.weather.dao | | |_DBHelper.java | |_com.weaher.utils 7
12、 | |_LocationX M Pa rse r.ja va | |_Weathe rInfoP arser.ja va | |_WebAccessTools.java |_res | |_ drawable | | |_(略 ) | |_layout | | |_gps.xml | | |_main.xml | | |_widget_layout.xml | | |_set_city.xml | |_menu | | |_configure_menu.xml | |_raw | | |_db_weather.db | |_values | | |_color.xml | | |_strin
13、gs.xml | |_xml | |_weather_widget.xml | |_AndroidManifest.xml 二、主要功能实现 1.获取城市码 db_weather.db 数据库文件 获取全国各地的城市码,是通过访问中央气象局网从省份直辖市到城镇一级一级深入得到的,获得一个地区的城市码总共需要访问 4 次网络,分别如下: 1. 访问 http:/ 得到 省份直辖市 列表与它的编号: 01|北京 ,02|上海 ,03|天津 ,04|重庆 ,05|黑龙江 ,06|吉林 ,07|辽宁 ,08|内蒙古 , 2. 访问 http:/ 得到该 省份直辖市的城市编号 (如访问山东: http:
14、/ 1201|济南 ,1202|青岛 ,1203|淄博 ,1204|德州 ,1205|烟台 ,1206|潍坊 , 3. 访问 http:/ 得到该城市的县区编号 (如访问济南: http:/ 120101|济南 ,120102|长清 ,120103|商河 ,120104|章丘 ,120105|平阴 ,. 4. 访问 http:/ 得到该县区的城市码 (如访问长清: http:/ 120102|101120102 8 首先实现上述功能需使用 Android 的网络访问技术,故编写工具类 WebAccessTools 类如下: /* * 根据给定的 url 地址访问网络,得到响应内容 (这里为 G
15、ET 方式访问 ) * param url 指定的 url 地址 * return web 服务器响应的内容,为 String类型,当访问失败时,返回为null */ public String getWebContent(String url) /创建一个 http 请求对象 HttpGet request = new HttpGet(url); /创建 HttpParams 以用来设置 HTTP 参数 HttpParams params=new BasicHttpParams(); /设置连接超时或响应超时 HttpConnectionParams.setConnectionTimeout
16、(params, 3000); HttpConnectionParams.setSoTimeout(params, 5000); /创建一个网络访问处理对象 HttpClient httpClient = new DefaultHttpClient(params); try /执行请求参数项 HttpResponse response = httpClient.execute(request); /判断是否请求成功 if(response.getStatusLine().getStatusCode() = HttpStatus.SC_OK) /获得响应信息 String content = E
17、ntityUtils.toString(response.getEntity(); return content; else /网连接失败,使用 Toast 显示提示信息 Toast.makeText(context, “网络访问失败,请检查您机器的联网设备 !“, Toast.LENGTH_LONG).show(); catch(Exception e) e.printStackTrace(); finally /释放网络连接资源 httpClient.getConnectionManager().shutdown(); return null; 由上面访问的可知,得到的编码与名称都是 “编码名称 ”的形式,因此在这也编写一个解析得到城市码的工具类 WeatherInfoParser,用于解析从服务器中得到的城市码: 9