软件工程毕业设计-基于android系统的天气预报查询系统.doc

上传人:教**** 文档编号:91752026 上传时间:2023-05-27 格式:DOC 页数:24 大小:1.16MB
返回 下载 相关 举报
软件工程毕业设计-基于android系统的天气预报查询系统.doc_第1页
第1页 / 共24页
软件工程毕业设计-基于android系统的天气预报查询系统.doc_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《软件工程毕业设计-基于android系统的天气预报查询系统.doc》由会员分享,可在线阅读,更多相关《软件工程毕业设计-基于android系统的天气预报查询系统.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、河北农业大学 本科毕业论文(设计)题 目: 基于android系统的天气预报查询系统 摘 要近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧,手机已被赋予了除通话以外的其它许多功能。全新的手机软件领域已逐渐聚焦了众多软件开发商的目光,软件开发者和软件用户将共同面临这个振奋人心的新境界。 本设计使用Android设计技术开发了一种运用

2、在Android系统上的手机天气预报软件系统,本系统通过选择城市来获得天气,风向,温度等信息。基于android的天气预报系统软件可以使用户对于各地的天气情况的实时掌握,极大的方便了用户的出行和行程安排,避免了不必要的麻烦,具有很强的实用性。关键词:天气预报系统;android开发AbstractIn recent years, with the 3G technology matures and the growing popularity of smart phones, the increasing demand for mobile applications, mobile appli

3、cation development become the most popular technology. Given a friendly boost by Google and Android Handset Alliance, Android stands out in numerous mobile application development platforms. Android is a truly open-source smart phone operating system, which once launched immediately by the global mo

4、bile device manufacturers and developers blitz, mobile phones have been given in addition to many other functions outside the phone. The new phone software field has gradually focused the attention of a large number of software developers, software developers and software users will be facing this e

5、xciting new realm.This design uses design techniques developed an Android application in the Android system mobile weather software system, the system by selecting the city to get weather, wind direction, temperature and other information. Android based software allows users to weather forecasting s

6、ystem for real-time weather conditions around the master, a great convenience to the users travel and travel arrangements, to avoid unnecessary trouble, and highly practical.Keywords: Weather forecast system; android development目 录 1. 需求分析11.1 开发背景11.2 系统研究内容11.3 项目需求分析12. GOOGLE ANDROID移动平台的相关理论12.

7、1 Google android 移动平台的概述12.1.1 Android系统的特点22.1.2 Android的功能22.2 Google android移动平台开发过程研究22.3 Google android移动平台下的应用研究32.4 小结33. 项目设计43.1 项目总体设计43.2 系统功能界面43.2.1 欢迎界面43.2.2 设置所在城市界面53.2.3 天气显示界面63.2.4 Widget桌面小部件界面73.3 设计目标84. 系统设计84.1 开发及运行环境84.2 数据库设计84.3 主要方法及步骤84.4 主要方法及技术95. 主要模块95.1 项目框架95.2 主

8、要功能实现105.2.1 导入db_weather.db数据库文件105.2.2 实现城市列表的创建与过滤115.2.3 访问网络得到天气信息145.2.4 Widget窗体小部件的更新156. 功能测试17结论21参考文献2221基于android系统的天气预报查询系统1. 需求分析1.1 开发背景近几年来随着3G技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。手机是已经成为了生活中不可少的通读设备,没有手机有时会让人觉得寸步难行,手机将脱离传统的打电话,发短信等基本功能,而基于智能手机的处理能力和扩展能力,基于3G网络高速数据传输,越来越多的功能

9、和业务将被开发出来并大规模的应用。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。Android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。为顺应潮流,本设计旨在搭载Android的移动设备上运行,实现天气状况的实时动态更新与显示,方便人们的出行与生活。1.2 系统研究内容1. 界面的设计2. 代码的设计3. 程序的测试4. 产品的发布1.3 项目需求分析根据功能的需求,分析此项目的主要功能应具备以下几点:1. 精确查询全国各地城市未来几天内的实时天气状况2. 系统要具有实用性,符合用户查看信

10、息习惯,界面设计优美3. 系统要具有稳定性,且在一定程度上节省流量的开销2. Google android移动平台的相关理论2.1 Google android 移动平台的概述Android 是 Google公司于07年11月5日宣布的基于LINUX平台开源手机操作系统,该平台由操作系统,中间件,用户界面和应用软件组成,Android是Google开发的基于Linux平台的开源手机操作系统。它包括操统,用户界面和应用程序-移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍,谷歌与开放手机联盟合作开发了Android,这个联盟由包括中国移动,摩托罗拉,高通,宏达在内的30

11、多家技术和无线应用的领军企业组成。通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。2.1.1 Android系统的特点1.开放性。Google与开放性手机联盟合作开发了android,Google通过与运营商,设备制造商,开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化,开放式的移动电话软件平台,在移动产业内形成一个开放式生态系统。2.应用程序无界限。Android上的应用可以通过标准API访问核心移动设备功能。通过互联网,应用程序可以声明它们的功能可提供其它应用程序使用。

12、3.应用程序是在平等的条件下创建的,移动设备上的应用程序可以被替换或扩展,即使是拨号或主屏幕这样的核心组件。4.应用程序可以轻松地嵌入网络。应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过Web view显示内容。5.应用程序可以并行运行。Android是一种完整的多任务环境,应用程序可以在其中并行运行,在后台运行时,应用程序可以生成通知引起注意。2.1.2 Android的功能1.支持虚拟键盘。虚拟键盘的出现意味着基于Android1.5或以上的版本的移动设备可以同时支持物理键盘和虚拟键盘。2.使用widget实现桌面的个性化。可以用widget修饰自己的桌面。大多数

13、小的Web应用都是从网络上获得实时数据并展示给用户的,android预装了Widget,包括数字时钟,日历,音乐播放器,相框。3.用在线文件快速浏览数数,类似于OSX Leopard的Quick look特征,Android的在线文件夹可显示的数据条目,比如联系人,喜欢的应用,E-mail信息,播放列表,书签,RSS源等,并不需要运行系统程序处理特定的数据条目。4.视频录制和分享。Android还有录制和分享视频的功能,对回放和MPEG-4,3GP等视频也有了更好的支持。可以通过E-mail,MMS或直接上传等方式来分享视频。5.更快,更兼容的浏览器,Android的基于WebKit内核的浏览

14、器带来了重要的调速半置,这得益于新的WebKit渲染引擎和优化的JAVA脚本编译器。6.Voice search语音搜索。带有语音识别技术的Google手机已于2008年11月面世,它支持语音搜索功能,该功能增强了默认的搜索能力,已超过了纯文本搜索。7.立体蓝牙和免提电话。除了增强的免提电话体验,Android还支持立体蓝牙(A2Dphe和AVCRP),并有自动配对功能。8.强大的GPS技术.Android内部提供了大量的GPS组件,我们可以很轻松地获得设备当前的位置等信息,让导航等功能更加完善。9.Android系统硬件检测,android可自动检测和修复SD卡的文件系统,允许第三方应用显示

15、Android系统的硬件特征,为了让用户下载到与自己的设备匹配的应用,我们可以检测用户设备的硬件信息,让满足应用要求的设备安装该程序。2.2 Google android移动平台开发过程研究Android移动平台作为21世纪的新秀,受到了越来越多的开发者的钟爱,在这股开发的浪潮中,逐渐形成了具有Android一套具有Android特色的开发流程。由于Android的优越性,其开发显得非常的有规律可寻。大致的开发流程如下:需求分析:作为一个软件,它必须有其存在的意义和价值,而这个价值和意义就需要靠需求分析来确定。功能分析。作为一个手机软件,它的使命就是给用户使用的。如何提供用户最好的用户体验就值

16、得每一个程序员的深思,这也是确保一个程序成功的关键所在。界面设计:作为一个手机软件,其只能在极有限的区域中显示,如何在有限的空间里更完美的展现出自己的独特之处就显得更为重要了。测试:在任何一个软件开发行业中,无论是J2EE,J2SE,J2ME等等其他开发中,测试时必不可少的一环,在Android开发中,由于手机的高频率使用,和硬件系统上的不足,使得对软件的要求更加的严格,这就要求在开发完成后,再对其进行严格的测试,而测试又包括了:单元测试,系统测试等方面的测试。系统开发:作为一个软件的主体部分,系统开发的好坏直接决定了该系统的性能和寿命。发布:在完成一个系统的开发后,就要对其发布,经过广大用户

17、的考验,只有经过这个过程,才算是一个合格的产品,在Android平台中,Google提供了完整的发布机制-Google market。2.3 Google android移动平台下的应用研究Android系统提供给应用开发者本身就是一个框架,所有的应用开发都必须遵守这个框架原则。我们在开发应用时就是在这个框架上进行扩展,下面来看看android这个框架都有些什么功能可供我们使用。Android.app:提供高层的程序模型和基本的运行环境Android.content:包含对各种设备上的数据进行访问和发布Android.database:通过内容提供者浏览的操作数据库Android.graphi

18、cs:图形库,包含画布,颜色过滤,点,矩形,可以将它们直接绘制到屏幕上。Android.location:定位和相关服务的类A: 提供帮助网络访问类,超过通常的*接口。Android.media: 提供一些类管理多种音频,视频的媒体接口。Android.os:提供了系统服务,消息转输和IPC机制。Android.opngl:提供OpenGL的工具。Android.provider:提供访问Android的内容提供者的类。Android.telephony:提供与拨打电话相关的API交互。Android.view提供基础的用户界面接口框架。Android.util:涉及工具性的方法,例如时间日期

19、的操作。Addroid.webkit:默认浏览器操作接口。Android.widget包含各种UI元素在应用程序的布局中使用。2.4 小结本章主要通过三个方面:1.Google android移动平台的概述:2. Google android移动平台开发过程的研究:3. Google android移动平台下的应用研究,概要的介绍了Google android移动平台相关知识,对Google android移动平台有初步的认识和了解,为后面的开发做了坚实的基础。3. 项目设计3.1 项目总体设计本软件是一个App Widget应用程序,启动程序后可以进行城市的设置,可以通过图片和文字显示当前和

20、未来两天的天气状况,包括温度、风向和雨雪情况等。该软件的基本功能需求有:1欢迎界面系统启动时首先进入欢迎界面;2启动App Widget应用程序为了方便用户实时了解天气状况,特别添加在Android系统桌面上显示当前天气与时间的天气小部件,使用户拿起手机的第一时刻就能了解天气,同时当用户单击小部件时,自动跳转至天气显示界面,显示三天内的详细天气。3设置所在城市界面通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市当三天内的天气状况;第一次运行时自动跳到该界面。4显示天气界面显

21、示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用户可通过按菜单键来显示菜单更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城市界面来更换预报城市。3.2 系统功能界面3.2.1 欢迎界面 当系统启动时,首先会显示欢迎界面。如图3-1所示:图3-1 欢迎界面3.2.2 设置所在城市界面1当第一次运行程序时,跳转至城市设置界面进行预报城市的选择,如图3-2所示:图3-2 设置城市2 用户可通过输入框过滤查询当前系统中预存的城市,如图3-3所示:图3-3 过滤框输入选择城市3.2.3 天气显示界面1选择了预报城市后,系统跳转至天气显示界面,显示该城市三天内的实时天气

22、, 如图3-4所示: 图3-4 显示天气2 在天气界面中用户可通过按菜单键来调出菜单,设置城市,更新天气与更换背景,如图3-5所示:图3-5 调出菜单3.2.4 Widget桌面小部件界面方便用户第一时间了解天气动态,添加widget显示功能界面,如图3-6所示: 图3-6 Widget桌面小部件3.3 设计目标设计完成一个实用稳定的天气预报系统,同时要廉价使其能滿足大部分用户的需求,因此针对上述要求,本设计应滿足:1系统能及时的反馈指定预报城市的天气情况;2. 可设置所在城市,自行输入或者列表选择城市;3节省流量开销,规定在指定的时间间隔内才更新天气,其它时段显示缓存的天气;4操作方便快捷,

23、使用简单,界面设计美观大方,支持widget。4. 系统设计4.1 开发及运行环境1. JDK1.6.0 _102. Eclipse3.83. Android Development Toolkit (ADT) 21.0.1 4. Android 2.2及以上 5. Windows 7 4.2 数据库设计由于在本系统中是通过访问中央气象台提供的天气信息得到的天气预报,在查询指定城市的天气时,需要用到它提供的城市码,而城市码相对稳定不变,所以在构建系统时将其事先通过Android的网络访问技术将其缓冲到本地SQLite数据库进行保存起来,方便以后的查询,同时节省了流量开销。综上所述在本地建立db

24、_weather.db的数据库,其中只存在两个表: provinces和citys。citys表中存在city_num用天气的查询,同时还存在外键province_id与provinces表形成1对n的关系。结构如图4-1所示:图4-1 数据库表结构4.3 主要方法及步骤1. 搭建Android开发环境,并建立名为WeatherForecastSystem项目。2. 在程序第一次运行时,将db_weather.db数据库文件导入到应用程序数据库中。3. 建立设置城市界面,读取数据库文件,获取省份,城市以及对应的城市码。4. 接收用户选择的城市码,访问:5. 解析天气信息,将城市码及天气信息缓冲

25、下来,并为其设置有效时间,方便下次启动时直接得到天气信息,过期则从网上更新。6. 定时由保存的城市码更新天气信息。4.4 主要方法及技术1. Android手机的界面UI设计2. Android的网络通信3. Android的广播4. Widget小部件编程5. JSON解析6. SQLite数据库操作7. Android文件操作5. 主要模块5.1 项目框架在装有ADT插件的Eclipse中新建一个名为WeatherForecastSystem的项目,项目主要文件结构如图5-1所示:图5-1 WeatherForecastSystem工程的源代码文件结构为了使源代码文件的结构更加清晰,Wea

26、therForecastSystem工程设置了多个命名空间,分别用来保存用户界面、数据库、后台服务和工具实体的源代码文件。源代码文件的名称以及说明如表5-1所示。表5-1 WeatherForecastSystem工程的文件用途说明包 名 称文 件 名说 明com.weather.appMainActivity.java“天气显示页面”的Activitycom.weather.appWelcomeActivity.java“欢迎页面”的Activitycom.weather.appSetCityActivity.java“设置城市页面”的Activitycom.weather.appWeath

27、erWidget.java桌面小部件com.weather.appUpdateWidgetService.java后台更新服务com.weather.adapterMyListAdapter.java城市列表com.weather.daoDBHelper.java数据库操作类com.weather.utilsWebAccessTools.java网络访问工具类5.2 主要功能实现5.2.1 导入db_weather.db数据库文件public void importInitDatabase() /数据库的目录 String dirPath=/data/data/com.weather.app/

28、databases; File dir = new File (dirPath); if (!dir.exists() dir.mkdir (); /数据库文件 File dbfile = new File(dir, db_weather.db); try if(!dbfile.exists() dbfile.createNewFile(); /加载欲导入的数据库 InputStream is= this.getApplicationContext().getResources().openRawResource(R.raw.db_weather); FileOutputStream fos

29、= new FileOutputStream(dbfile); byte buffere=new byteis.available(); is.read(buffere); fos.write(buffere); is.close(); fos.close(); catch(FileNotFoundException e) e.printStackTrace(); catch(IOException e) e.printStackTrace(); 5.2.2 实现城市列表的创建与过滤实现城市列表是通过继承android.widget.BaseExpandableListAdapter适配器实现

30、的,其中主要实现它的public View getGroupView()得到列表的一级列表和public void getChildView()得到列表的二级子列表实现的,在这里由于只是实现文本显示功能,故用TextView组件来填充就行了,如果要构造这个自定义的适配器,则只需在提供存放省份直辖市的一级列表的数组String groups和存放对应的城镇的二级列表的String childs就行了。Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View con

31、vertView, ViewGroup parent) TextView textView = null;/这里判断convertView是否为空if(convertView=null) /产生一个TextView组件textView = getGenericView();/设置它的文本内容textView.setText(getChild(groupPosition,childPosition).toString(); else textView = (TextView)convertView;textView.setText(getChild(groupPosition,childPosi

32、tion).toString();return textView;Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) TextView textView = null;if(convertView=null)textView = getGenericView();textView.setText(getGroup(groupPosition).toString();else textView = (TextView)convertVi

33、ew;textView.setText(getGroup(groupPosition).toString();return textView; private TextView getGenericView() AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 48);TextView textView = new TextView(context);textView.setLayoutParams(lp);textView.setTextSize(18)

34、;textView.setTextColor(Color.WHITE);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(32, 0, 0, 0);return textView;同时为了兼具过滤功能,还需再实现android.widget.Filterable接口,这个接口有一个getFilter()返回Filter过滤器的列表,故还要提供一个Filter过滤类,在本系统中,实现的是一个内部类CityFilter,它继承android.widget.Filter类,覆盖实现了两个方法

35、,一个是performFiltering()得到FilterResults过滤结果对象方法,另一个是根据得到的FilterResults对象更新适配器的publishResults()方法。其中的performFiltering(CharSequence constraint)方法的实现是通过constraint这个关键字以省份直辖市为单位进行匹配,如果匹配成功,则添加该省份以下的所有城市,如果匹配不成功,则再逐一与这个省份下的城市匹配,则只添加匹配的城市,其中匹配的结果放在MapInteger,ArrayListvalues这样的向量中,再由新建的FilterResults封装返回,(具体实

36、现如下):1. 首先是对关键字进行判断是否为空,如为空则由values添加所有省份与城市,其中的allGroups和allChilds保存的是所有的省份与对应的城市:/当过滤条件为空时,返回所有的省份与城市 if(constraint = null | constraint.length() = 0) for(int i=0; iallGroups.length; i+) ArrayList index = new ArrayList(); /添加所有与之对应的城市 for(int j=0; jallChildsi.length; j+) index.add(j); values.put(i,

37、 index); 2. 如果关键字constraint不为空,则以省份为单位进行匹配,省份匹配的添加下面的所在城镇,如果不匹配,则进一步深入匹配城镇,添加符合条件的城镇:String filterStr = constraint.toString(); for(int i=0; iallGroups.length; i+) /查找省名是否包含用户输入的字符串 if(allGroupsi.contains(filterStr) ArrayList index = new ArrayList(); /添加所有与之对应的城市 for(int j=0; jallChildsi.length; j+)

38、index.add(j); values.put(i, index); else ArrayList index = new ArrayList(); /如果省份名没有,则查找它下面的城市名是否包含 for(int j=0; j 0) values.put(i, index); else index = null; 3. 得到过滤的结果后将其用FilterResource封装后返回:FilterResults results = new FilterResults(); results.values = values; results.count = values.size(); 另外的pub

39、lishResults(CharSequence constraint,FilterResults results)方法就是根据上面得到的results对象来得到新的String groups与String Childs数组,再调用BaseExpandableListAdapter父类的notifyDataSetChanged()方法来更新列表,从而实现过滤后结果的显示(具体实现如下):1. 首先将FiltersResult对象MapInteger,ArrayListfilterResult,然后来判断过滤后的结果长度是否为0,如果长度为0则说明过滤后的结果为空,则调用父类的notifyDat

40、aSetInvalidated()方法阻止列表更新。2. 如果长度不为0,则说明存在过滤结果,则将它转换为groups数组与childs数组,并调用notifyDataSetChanged()方法实再更新:如上所述则就实现了带有过滤性可伸展性列表适配性的实现,则在使用时在XML组件配置文件中使用ExpandableListView列表,并调用它的setAdapter()方法来加载自定义的适配器。而在使用它的过滤功能时则调用自定义适配器的getFilter()得到过滤Filter对象,再调用Filter对象的filter(String)方法实现的,在本系统中用触发文本输入框EditText的Te

41、xtChangedListener事件调用从而实现手动选择所在城市的过滤查询。5.2.3 访问网络得到天气信息接收用户选择的城市码,访问:public class WebAccessTools private Context context;public WebAccessTools(Context context) this.context = context;public String getWebContent(String url) /创建一个http请求对象HttpGet request = new HttpGet(url);/创建HttpParams以用来设置HTTP参数HttpP

42、arams params=new BasicHttpParams();/设置连接超时或响应超时HttpConnectionParams.setConnectionTimeout(params, 3000);HttpConnectionParams.setSoTimeout(params, 5000);/创建一个网络访问处理对象HttpClient httpClient = new DefaultHttpClient(params);try/执行请求参数项HttpResponse response = httpClient.execute(request);/判断是否请求成功if(respons

43、e.getStatusLine().getStatusCode() = HttpStatus.SC_OK) /获得响应信息String content = EntityUtils.toString(response.getEntity();return content; else /网连接失败,使用Toast显示提示信息Toast.makeText(context, 网络访问失败,请检查您机器的联网设备!, Toast.LENGTH_LONG).show();catch(Exception e) e.printStackTrace(); finally /释放网络连接资源httpClient.

44、getConnectionManager().shutdown();return null;5.2.4 Widget窗体小部件的更新由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与系统中时间的一致。实现这个功能需要用到AlarmManager类,这个类专门用来设定在某个指定的时间去完成指定的事件。设计思路是在Widget的onUpdate方法中启动一个自定义更新后台服务,更新widget,并设定下一分钟再次调用此服务。具体实现过步骤如下:1. 首先自定义一个后台运行服务类继承至Service类,实现它的服务开始运行调用的onStart()方法:super.onStart(intent, startId); /得到widget的布局对象 RemoteViews views = WeatherWidget.getWeatherView(this); /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁