• 2.02 MB
  • 2022-04-22 13:44:55 发布

安卓网络天气预报毕业论文.doc

  • 45页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'安卓网络天气预报毕业论文目录摘要IAbstractII第1章引言11.1研究背景11.2国内外的研究状况及发展趋势11.3系统分析及其主要内容21.4论文组织结构2第2章系统实现所涉及的技术32.1Android系统概述32.2Eclipse介绍32.3Android系统框架42.4Android四大组件42.5用户界面62.6Fragment72.7网络编程之使用HttpClient进行Get方式通信7第3章开发环境配置93.1Android开发框架93.2开发所需软件123.2.1Android开发环境配置133.2.2Eclipse的设置14第4章系统总体分析与模型设计154.1系统的总体结构154.2功能分析164.2.1天气模块功能分析164.2.2生活模块功能分析174.2.3我模块功能分析174.3系统流程图18第5章详细设计205.1新建工程205.2AndroidUI界面的实现215.3登陆注册模块的实现22I 5.4界面切换功能实现235.5天气模块的实现235.5.1天气信息245.5.2温度曲线图的画法255.5.3下拉刷新255.6生活模块的实现255.7我模块的实现265.7.1城市管理的功能实现265.7.2通知提醒功能实现27第6章系统测试286.1测试目的286.2测试环境296.3测试结果30致谢32参考文献33附录34附录A:主要源程序34附录B:软件使用说明书45附录C:光盘46I 中原工学院信息商务学院毕业设计(论文)第1章引言许多先进技术迅速地应用于气象业务中,可供天气预报用的实时和非实时资料急增,这就要求利用自动化的高速通信技术和信息处理技术处理这些资料。为适应上述发展,正逐步改进气象通信体制,加速气象通信现代化。现在人们生活水平的提高,对生活质量的要求也越来越高,然而外部自然气候的变化却不容乐观。不管是外出旅行还是农业生产等,气候变化情况一直都引起人们的普遍关注,人们迫切的需要随时随地的掌握准确的天气预报信息。比如,如果有雨,就建议出门带伞;如果温度高于某值就建议防晒等。1.1研究背景Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。在如今这个智能手机系统群雄纷争的时候,Android采用Linux内核,开放手机联盟成员可以任意使用和修改SDK包,系统的开源性使其具有良好的拓展性。不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。2013年09月24日Android迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。1.2国内外的研究状况及发展趋势近些年来,世界范围的气候异常,使人类面临日益严重的粮食、能源和水资源危机,因此社会对气象工作提出了更为迫切的要求。与此同时,遥感技术,电子计算机等最新科学技术进入气象业务,形成了新的大气探测技术,快速通信和计算处理,从而获取更多的大气信息,推动了气象业务的发展。国外气象业务发展的一个重要趋势是日益趋向自动化,即把自动化观测、数据处理、通信及客观分析、预报制作和发布结合成一个完整的自动化系统。移动设备性能的不断提高,无线网络从2G提高到3G甚至4G,天气预报在科技不断进步的推动下也需要朝着信息多元化演变,应该从单纯的文字信息逐渐向文字图像视频等多种数据融合转变。形成了一个集中、统一、数字化的天气预报系统,实现智能终端高效、及时、稳定的信息交互。43 中原工学院信息商务学院毕业设计(论文)1.3系统分析及其主要内容Android平台的天气预报软件可以进一步扩大气象信息的覆盖面,让广大Android手机用户能够在第一时间获取最新的天气预报信息,以便提前预防,方便出行。同时,把气象灾害造成的损失降到最低,也可以提高公共服务质量,更好的发挥气象事业对经济社会发展的现实性作用,有巨大的实用价值。该技术在Android平台已经比较成熟,通过该软件的开发让我们更好的认识Android系统的工作原理。本软件是一个App应用程序,启动程序后可以切换城市,通过图片和文字显示当前和未来的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据通过后台服务获取,后台服务可以按照一定时间间隔,从互联网上获取天气预报信息,并将天气信息解析显示在手机界面上。从上面的描述中可以基本了解软件的功能需求:(1)启动App应用程序注册登陆。(2)显示天气模块:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。(3)显示生活模块:通过文字图片动画显示当前的天气情况,包括城市当前天气、温度、风向、风速、湿度;同时显示今后5天的天气情况。(4)我模块:城市管理,通知提醒,意见反馈,关于。1.4论文组织结构本论文讨论的是基于android平台的天气查询系统的设计与开发,所以本文的组织结构就是围绕着基于基于android平台的天气查询系统的设计与开发的整个过程来进行。第一章引言。第二章系统实现所涉及的技术。第三章安卓开发环境配置。第四章系统总体分析与模型设计。第五章详细设计,对界面模块设计、数据解析、曲线图的画法进行代码设计。第六章测试,对设计功能进行了测试。文章最后是总结、致谢与参考文献等。43 中原工学院信息商务学院毕业设计(论文)第2章系统实现所涉及的技术2.1Android系统概述Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android一词最早出现于法国作家利尔亚当(AugusteVilliersdel"Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L"èvefuture)中。他将外表像人的机器起名为Android。Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,[1] 于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。2012年7月美国科技博客网站BusinessInsider评选出二十一世纪十款最重要电子产品,Android操作系统榜上有名。2.2Eclipse介绍Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和、Eclipse技术项目三个项目组成,具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。43 中原工学院信息商务学院毕业设计(论文)2.3Android系统框架Android系统的软件开发,语言基础是java语言,通过控件的设置以及方法调用,实现一系列的功能。Android系统提供给应用程序开发者的只是一个框架,在该平台下开发应用程序必须要遵守这个框架原则。我们开发的应用程序其实就是在这个框架上进行拓展,下面介绍一下android这个框架所提供的功能。Android.app:提供最上层的程序模型和运行环境。Android.content:包含对设备上的数据进行访问和发布的类。Android.database:Android系统内置一个轻量级的SQLite数据库。Android.graphics:底层的图形库,包含颜色过滤,画布,矩形,点,可以用来将它们直接绘制到屏幕上。Android.net:提供用来帮助访问网络的类。Android.location:定位以及与定位有关的一些类。Android.util:涉及到一些实用性的方法,例如对时间和日期进行操作。Android.media:提供一些管理多种视频,音频的媒体接口。Android.os:提供了系统服务,IPC机制和消息传输。Android.opngl:提供了OpenGL的工具。Android.provider:提供了访问Android中的内容提供者的类。Android.telephony:提供用来与拨打电话相关的API交互的类。Android.view:提供最基本的用户界面接口框架。Addroid.webkit:提供用来调用默认浏览器的接口。Android.widget包含各种UI元素,可以在应用程序的布局中使用。2.4Android四大组件一个Android应用程序,通常由Activity、IntentReceiver、Service、CONtentProvider四种功能组件构成。但是,并不是每一个Android应用程序都需要用到这四种功能组件,而是只需上述四种功能组件的某些组合。(1)ActivityActivity是最基本的Android应用程序组件。大多数应用由多个屏幕组成,一个Activity通常则是一个单独的屏幕。每一个Activity都被实现为一个独立的类,并且从Activity基类中继承而来。Activity类将会显示由视图控件组成的用户接口,并对事件做出响应。Android使用Intent这个特殊类,实现在屏幕与屏幕之间移动。通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity将会调用STartActivity(Intent43 中原工学院信息商务学院毕业设计(论文)myIntent)方法,然后,系统会在所有安装的应用程序中所定义的IntentFilter中查找,找到最匹配myIntent的和Intent对应的Activity.新的Activity接收到myIntent的通知后,开始运行。当startActivity方法被调用时将触发解析myIntent的动作。这个机制具有两点优势:一是能够重复利用从其他组件中以Intent形式产生的一个请求;二是Activity可以在任何时候被一个具有相同IntentFilter的新Activity取代。Activity 的生命周期在Android开发中,Activity是非常重要的。Activity主要负责创建和显示窗口,也可以把一个Activity理解成一个显示的屏幕;在Android的应用中不是仅有一个Activity,而是由很多个Activity存在。因其重要性,开发Android务必熟悉Activity生命周期。onCreateView:Activity初次创建时被调用,一般在这里创建view,初始化布局信息,将数据绑定到list以及设置监听器等。如果Activity首次创建,本方法将会调用onStart();如果是停止后重新显示,则将调用onRestart()。onStart:当Activity对用户即将课件的时候被调用onResume()。onRestart:当Activity停止后重新显示的时候被调用,然后调用onStart()。onPause:当系统要启动一个其他的Activity时调用(其他的Activity显示之前),这个方法使用来停止动画和其他占用CPU资源的事情,所以这这里应该保存那些持久数据,这些数据可以在onResume()方法中读出。onStop:当另一个Activity恢复并遮盖住当前Activity,导致其对用户不再可见时调用,一个新的Activity启动,其他Activity重新回到前景与用户交互时会重新调用onResume(),如果Activity将退出则调用哦你D额story()。onDestory:在当前Activity被销毁之前所调用的最后一个方法,当进程终止前调用。(1)IntentReceiverIntentReceiver是实现的应用能够对一个外部的事件作出响应。IntentReceiver在AndroidManifest.xml中注册,也可以在代码中使用Context.registerReceiver()进行注册。当一个IntentReceiver被触发时,应用不必对请求调用IntentReceiver,系统会在需要的时候启动应用。各种应用还可以通过使用Context.brOAdcastIntent()将它们自己的IntentReceiver广播给其他应用程序。(2)ServiceService是一段长生命周期的、没有用户界面的程序。例如媒体播放器这个Activity会使用Context.startService()来启动一个Service,从而可以在后台播放音乐。同时,系统也将保持这个Service一直执行,直到Service43 中原工学院信息商务学院毕业设计(论文)运行结束。系统可通过使用Context.bindService()方法,连接到一个Service上(如果这个Service还没有运行将启动它)。当连接到一个Service之后,还可以利用Service提供的接口与它通信。就媒体播放器来说,还可以进行暂停、重播等操作。(1)ContentProviderContentProvider是Android应用程序能够将它们的数据保存到文件、SQL数据库,甚至是任何有效的设备中。ContentProvider实现了应用数据与其他的应用程序的共享。ContentProvider类实现一组标准的方法,能够让其他应用程序保存或读取此ContentProvider处理的各种类型数据。在Android中,默认使用SQLite作为系统数据库,但使用方法略有不同。Android中每一个应用程序都运行在各自的进程中,当访问其他应用程序的数据时,需要在不同的虚拟机之间传递数据,这样操作起来会有些困难(正常情况下,不能读取其他应用程序的数据库文件)。ContentProvider正是解决不同的应用包共享数据的工具。2.5用户界面Android系统的界面空间分为定制控件。定制空间是用户独立开发的空间,或者通过继承并修改系统空间后所产生的新空间,能够提供特殊的功能和显示需求。系统控件是Android系统中已经封装好的界面控件,而在代码中动态修改需要更新状态的界面元素。当然,用户也可以将所有的界面元素,无论在程序运行后是否需要修改其内容,都放在代码中进行定义和声明。很明显这不是一种良好的界面设计模式,会给后期界面修改带来不必要的麻烦,是应用程序开发过程中最常见的功能控件。系统控件更有利于进行快速开发,同事能够使Android应用程序的界面保持一定的一致性。常见的系统控件包括TextView、EditView、Button、ImageButton、CheckButton、Spinner、ListView和Tablehost。界面布局(layout)是用户界面结构的描述,定义界面中所有的元素、结构和相互关系。一般生命Android程序的界面布局有两种方法,第一种是使用XML文件描述界面的布局,另一种是在程序运行时动态添加或修改界面布局。Android系统在生命界面布局上提供了很好的灵活性,用户既可以独立使用任何一种声明布局的方式,也可以同时使用两种方式。一般情况下,使用XML文件来描述用户界的基本元素,而在代码中动态修改需要更新状态的界面元素。当然,用户也可以将所有的界面元素,无论在程序运行后是否需要修改其内容,都放在代码中进行定义和声明。很明显这不是一种良好的界面设计模式,会给后期界面修改带来不必要的麻烦,而且界面较多时,程序代码也会显示凌乱不堪。43 中原工学院信息商务学院毕业设计(论文)使用XML文件声明界面布局,能够更多地将程序的表现层和控制层分离,在修改界面时将不再需要更改程序的源代码。界面布局的种类:(1)线性布局:线性布局(LinearLayout)是一种重要的界面布局,也是经常使用的界面布局。在线性布局中,所有子元素都在垂直或水平方向按照顺序在界面上排序。(2)框架布局:框架布局(FrameLayout)是最简单的界面布局,用来存放一个元素的空白控件,且子元素的位置不能够制定的,只能够放置在空白空间的左上角。(3)表格布局:(TableLayout)也是一种常用的界面布局,它将屏幕划分为表格,通过制定行和列可以将界面元素添加到表格中。(4)相对布局:(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局为止。(5)绝对布局:(AbsoluteLayout)能通过指定界面元素的坐标文职,来确定用户界面的整体布局。2.6FragmentFragment的主要目的在大屏幕设备上实现灵活的、动态的界面设计。例如,在Android的平板电脑上,因为屏幕有更多的空间来配置更多的组件,并且这些组件之间还会产生一定的数据交互。Fragment支持这种设计理论,开发人员不需要管理复杂的试图结构变化,而且把这些动态的管理交给Fragment和回退堆栈(backstack)完成,在进行界面设计时,只需要将界面布局按照功能和取于划分为不同的模块,每个模块设计成一个Fragment即可。Fragment具有和Activity类似的生命周期,但是比Activity支持更多的事件回调函数。Fragment生命周期中回调函数。2.7网络编程之使用HttpClient进行Get方式通信基于Android操作系统的天气实况预报系统设计的核心是通过调用通信协议SOAP(SimpleObjectAccessProtocol)的接口,从WebService提供商中提取天气预报的数据信息。采用HttpPost来与后台交互,然后对数据进行解析,从中找到需要的数据。如下图所示为提供webservice服务的网站网络拓扑图43 中原工学院信息商务学院毕业设计(论文)图2-1网络拓扑图在Android开发中,AndroidSDK附带了Apache的HttpClient,它是一个完善的客户端。它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTPGET和HTTPPOST调用。HTTP工作原理:(1)客户端(一般是指浏览器,这里是指自己写的程序)与服务器建立连接(2)建立连接后,客户端向服务器发送请求(3)服务器接收到请求后,向客户端发送响应信息(4)客户端与服务器断开连接HttpClient的一般使用步骤:(1)使用DefaultHttpClient类实例化HttpClient对象(2)创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。(3)调用execute方法发送HTTPGET或HTTPPOST请求,并返回HttpResponse对象。(4)通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。最后记得要在AndroidManifest.xml文件添加网络权限聚合数据全国天气预报数据接口使用HttpClient进行Get方式通信,通过HttpClient建立网络连接,使用HttpGet方法读取数据,并且通过HttpResponse获取Entity返回值。43 中原工学院信息商务学院毕业设计(论文)第3章开发环境配置3.1Android开发框架下图是Android的体系架构图,自上而下分别为应用层、应用框架、类库和Alvik运行时环境以及Linux内核。图3.1Android的体系架构图一般来说,我们想从事Android开发,可以从应用开发作为切入点,逐渐熟悉其整个体系,并慢慢往其底层渗透,从而能做到软硬兼备,Android系统开发班的课程设置就充分考虑到了这一点,既涉到应用开发的透彻掌握,又帮助大家在系统开发层面上做好充分的准备。而从学习的路线图上来说,先熟悉JavaSE编程,能比较熟练的使用Java语言进行编程,熟悉Java语言语法特点,熟悉JavaIO、Java线程、网络编程、XML处理等。另外,因为很多的Android应用在运行时都需要去访问网站服务器,因此,熟悉一种网络编程语言也是必要的。无论是从开发班的课程设置就充分考虑到了这一点,既涉到应用开发的透彻掌握,又帮助大家在系统开发层面上做好充分的准备。而从学习的路线图上来学习的方便性还是市场占有情况来说使用JSP/Servlet都是不二的选择,另外,在这个阶段也顺便学习一下SQL语法和熟悉一种SQL数据库,以方便后续Android开发中进行SQLite数据库开发。学习完这些课程后,就可以开始进行Android的应用开发的学习,例如Android中的UI组件、基本组件、数据存储、传感器、图形图像处理、多媒体处理、游戏开发等。43 中原工学院信息商务学院毕业设计(论文)Android包含一套C/C++库,Android系统的各式组件都在使用。这些功能通过Android应用框架暴露给开发人员。Android的核心类库提供Java类库所提供的绝大部分功能。每个Android应用都运行在自己的进程上,享有Dalvik虚拟机为它分配的专有实例。为了支持多个虚拟机在同一个设备上高效运行,Dalvik被改写过。Dalvik虚拟机执行的是Dalvik格式的可执行文件(.dex)该格式经过优化,以降低内存耗用到最低。Java编译器将Java源文件为class文件,class文件又被内置的dx工具转化为dex格式文件,这种文件在Dalvik虚拟机上注册并运行。在一些底层功能——比如线程和低内存管理方面,Dalvik虚拟机是依赖Linux内核的。为了更好地进行应用编程,可以有选择的对其Lib类库进行分析,以加深对其工作机制的理解。再往下,就是操作系统层级了,这里应该要对Linux操作系统进行学习,熟悉其内核和运行原理,熟悉ARM体系架构以及常用指令并熟悉驱动的编写方式,掌握其移植方法等。Android的核心应用程序就是依赖框架层次API开发的,程序员们可以充分使用这些API。应用架构设计的初衷是,简化组件复用机制,任何应用都能发布自己的功能,这些功能又可以被任何其他应用使用,当然要受来自框架的强制安全规范的约束。每个Android应用程序都存在于它自己的世界之中,默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,并加以权限设置,使得应用程序的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的应用程序所访问。Android应用的构成和工作流程如图图3.2Android应用的构成和工作流程43 中原工学院信息商务学院毕业设计(论文)每个Android应用程序都存在于它自己的世界之中,默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,并加以权限设置,使得应用程序的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的应用程序所访问。(l)应用程序架构:在应用程序架构内已经具备多种不同的基础组件,在开发应用程序时,就可以直接调用这些组件来使用,可以节省开发应用程序的心力及时间。(2)Dalvik虚拟机器:在Android平台上所使用Java虚拟机,不是Sim公司的标准Java虚拟机,而是使用Google自主开发的代号为Dalvik的虚拟机,它在保证API方面的兼容的同时,针对移动手机进行了大幅优化,占用资源更小,运行效率更高。(3)集成的浏览器:集成的浏览器是Android内建的浏览器,是以WebKit的浏览引擎为基础所开发成的。WedKit是一个开源浏览器网页排版引擎,目前使用WebKit引擎的浏览器主要有:Safari、Midori、Epiphany等。配合Android手机的功能,可以在浏览网页时,达到更好的效果,例如:局部性的缩放网页上的资讯、触控式的操作等效果。 (4)优化的绘图能力:在程序里可以用到的绘图功能分为2D与3D两个方面。在2D方面Android提供了一套特有的类库(SGL;而在3D方面则是使用OpenGLES1.0(openGLforEmbeddedsystems)规范的类库。它们是一种非常快的图形引擎,并且支持硬件加速。(5)SQLite数据库:SQLite提供结构化的数据存取。SQLite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,它占用的资源非常低。它能够支持Windows/Linux/Unix等主流的操作系统,同时能够跟很多程序语言相结合,比如:php、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL来讲,它的处理速度比它们都快。它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小只有250KB但支持数据库大小至2TB。它虽然很小巧,但是支持的SQL语句毫不逊色于其它开源数据库。同时它还支持事务功能和并发处理等等。SQLite也是一套开放性的关联式资料库其特点在于轻量性方面的设计结构,更适合在手机上使用。(6)多媒体的支持能力:主要用于播放媒体文件。这同时包括对音频(如播放MP3或其他音乐文件等)和视频(如播放从网上下载的视频)的支持,并支持“播放URI地址”(Note:URI即是统一资源识别地址)模式—43 中原工学院信息商务学院毕业设计(论文)在网络上直接播放的流媒体。另外支持各种通用的静态图像格式,例如:JPG、PNG、GIF等格式。(7)GSM技术:GlobalSystemforMobileCommunications,即全球移动通讯系统,俗称”全球通”,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。GSM技术是属于手机硬件方面的展现,。它无需安装和管理配置,它是一个储存在单一磁盘文件中的完整数据库,体积小只有250KB但支持数据库大小至2TB。它虽然很小巧,但是支持的SQL语句毫不逊色于其它开源数据库。默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,同时它还支持事务功能和并发处理等等也是在开发Android应用程序时可以突出的特点之一。 (8)蓝牙、EDGE、3G及Wi-Fi:蓝牙是一种新型、开放、低成本、短距离的无线连接技术可取代短距离的电缆,实现话音和数据的无线传输。EDGE(EnhancedDataRateforGSMEvolution),即增强型数据速率GSM演进技术。EDGE是一种从GSM到3G的过渡技术它主要是在GSM系统中采用了一种新的调制方法,即最先进的多时隙操作和SPSK调制技术。由于8PSK可将现有GSM网络采用的GMSK调制技术的信号空间从2扩展到8,从而使每个符号所包含的信息是原来的4倍。Wi-Fi(WirelessFidelity),即无线保真技术,与蓝牙技术一样,是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。GSM技术是属于手机硬件方面的展现,这些通讯能力也是属于手机硬件方面的展现,也是在开发Android应用程序时可以突出的特点之一。(9)GPS:GlobalPositioningSystem,即全球定位系统,它是一个由覆盖全球的247颗卫星组成的卫星系统。这个系统可以保证在任意时刻和任何地点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人。这个同样也是属于手机硬体方面的体现也是在开发Android应用程序是可以突出的特点之一。3.2开发所需软件每个Android的上层应用程序是用Java语言开发,同时还需要基于Dalvik43 中原工学院信息商务学院毕业设计(论文)虚拟机,所以,只有Eclipse还不够,因为是使用Java语言进行开发,还应该有由SUN公司提供的JavaJDK(其中包括JRE:JavaRuntimeEnvironment)。此外,Android的应用程序开发和Java开发有较大区别的,还要有Google提供的Android SDK。同时,还需要在Eclipse安装ADT,为Android开发提供开发工具的升级或者变更,是Eclipse下开发工具的升级下载的工具。简言之,需要以下软件,才能搭建Android开发环境,从而进行Android应用程序的开发。(1)JavaJDK(2)Eclipse(3)AndroidSDK(4)ADT3.2.1Android开发环境配置Eclipse设计的美妙之处,在于所有东西都是外挂,除了底层的核心以外。这种外挂设计让Eclipse具备强大扩充性,但更重要的是,此平台提供一个定义明确的机制,让各种外挂程序共通合作(透过延伸点extensionpoints)与贡献(contributions),因此新功能可以轻易且无缝地加入平台配置环境变量步骤:首先,你应该已经安装了java的JDK了,本文安装的是jdk-7u7-windows-x64;并记录下安装目录C:ProgramFilesJavajdk1.7.0_07然后进入“计算机”的“属性”选项,选择“高级系统设置”选择“环境变量”点击“环境变量”之后,接下来就是具体的配置过程(1)选择新建“变量名”:Java_Home“变量值”:C:ProgramFilesJavajdk1.7.0_07注:变量值这一栏主要填写的是你安装javajdk的路径,这里根据个人的情况可能会有所不同(2)选中环境变量中的“path”在“变量值”一栏的最前面添加如下的code: %Java_Home%bin;%Java_Home%jrebin;注意:上面的代码最好一个字符不要差,因为Java_Home已经限制了你的JDK的路径了,Java的每个版本的JDK应该都是由这些东西构成的(3)上一步确定之后,再“新建”“变量名”:ClassPath“变值”:.;%Java_Home%bin;%Java_Home%libdt.jar;%Java_Home%libtools.jar注:上面的代码最好也是一个字符不变的贴上去,变量值最前面的.;不要漏掉。43 中原工学院信息商务学院毕业设计(论文)做完上面的三个步骤之后,环境变量的配置已经完成了。3.2.2Eclipse的设置(1)Eclipse的安装直接解压缩Eclipse3.4.1.zip到指定目录如:F:Androideclipse运行eclipse.exe,设置Workspace,指定一个开发目录给它就可以了,Eclipse安装完毕(2)安装android-sdkAndroidSDK同Eclipse一样,直接解压缩到任意目录;如E:Android中就可以将AndroidSDK中的tools绝对路径添加到系统PATH中,添加环境变量PATH值为SDK中tools的绝对路径,“确定”后,重新启动计算机。重启计算机以后,SDK安装成功。(3)设定"SDKLocation"打开EclipseIDE,进入菜单中的"Window"->"Preferences";打开"Preferences"窗口,选中"Android";直接设定"SDKLocation"为SDK的安装目录。"OK"后,再次打开这个窗口,你可以看到SDK列表(4)安装AndroidDevelopmentTools(ADT)打开EclipseIDE;进入菜单中的"Help"->"SoftwareUpdates"进入选项卡"AvailableSoftware"->"AddSite"–>"Location:"输入http://dl-ssl.google.com/android/eclipse勾选"AndroidDDMS"和"AndroidDevelopmentTools","Install"一路Next,注意Accept许可,直到完成。到此,在Windows7下的Android开发环境就搭建成功了。43 中原工学院信息商务学院毕业设计(论文)第4章系统总体分析与模型设计本章利用模块图对基于Android平台的天气查询系统的设计与开发进行详细的阐述与研究,包括三个模块:天气模块,生活模块,我模块。4.1系统的总体结构图4-1系统模块图本软件是一个App应用程序,启动程序后可以切换城市,有一个显示天气情况的用户界面,通过图片和文字显示当前和未来几天的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务按照一定时间间隔,从互联网上上获取天气预报信息,并将天气信息保存在数据库中。 从上面的描述中可以基本了解软件的功能需求:(1)启动App应用程序注册登陆;(2)显示天气模块:通过文字和图片显示当前的天气情况,包括日期、时间、城市、最高温度、最低温度、当前温度等。 (3)显示生活模块:穿衣/雨具/紫外线/洗车等生活指数。(4)我模块:城市管理,通知提醒,意见反馈,关于。43 中原工学院信息商务学院毕业设计(论文)4.2功能分析从上面的描述中可以基本了解软件的基本功能,但为了将需求分析过程变得简单明了,首先找出用户界面上需要显示的内容。功能描述中有“显示天气情况的用户界面”除此以外,一般应用软件还应有显示配置信息的界面。因此,本示例应该包含三个用户界面:显示天气模块的界面,生活模块界面,我模块界面4.2.1天气模块功能分析(1)模块功能概述天气模块的功能有:实时天气、未来一周的天气、一周温度曲线图、下拉刷新。模块功能如图4-2所示:图4-2天气模块图(2)模块功能特点实时天气:显示所选城市实时天气状况,包括城市名称、天气描述、温度高低、风速、天气描述图片、日期、星期。此界面是应用程序的主界面,所以在设计时应尽量使界面美观,将天气数据以用户容易接受的方式呈现出来;未来天气:对未来6天的天气情况简要描述,天气描述、温度高低等数据,使用户一目了然,使人们及时了解天气变化,对日常生活出行、穿衣做好准备;打开应用程序就可以直接看到该城市的天气状况。一周温度曲线图:更加形象的描述一周最高温、最低温的天气变化,方便用户及时获取天气信息。下拉刷新:触摸屏幕下拉到一定幅度,从网上重新获取数据43 中原工学院信息商务学院毕业设计(论文)加载最新的天气信息,方便用户准确的获取实时天气。4.2.2生活模块功能分析(1)模块功能概述生活模块的功能有:穿衣/雨具/紫外线/洗车等,获取实时的天气信息,方便用户生活。模块功能如图4-3所示:图4-3生活模块图(2)模块功能特点打开生活模块,就能看到所选城市的日期、实时天气信息,穿衣指数、穿衣建议、紫外线等生活信息,方便用户获取天气信息,让生活更加舒适。4.2.3我模块功能分析(1)模块功能概述我模块的功能有:城市管理、通知提醒、意见反馈、关于。模块功能图4-4所示:43 中原工学院信息商务学院毕业设计(论文)图4-4我模块图(2)模块功能特点城市管理:可以切换城市,用户选择查询城市的天气信息,这个可以加入定位功能,自动定位到用户所在地点,还有待完善。通知提醒:打开以后,实时天气常驻通知栏,提醒用户天气信息,提醒内容包括:所选城市的温度,风向、风力、湿度、更新时间等意见反馈:使用过程中一切问题都可以反馈,方便了解软件的使用情况,以及需要添加的功能。关于:软件的版本信息。4.3系统流程图启动程序后显示所选城市的天气信息,通过图片和文字显示天气状况,主要有温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,从互联网上获取天气预报信息。系统流程如图4-5所示:43 中原工学院信息商务学院毕业设计(论文)图4-5系统流程图本软件先注册再登陆,默认天气是郑州,登陆之后显示郑州的天气信息和生活指数,在我模块可以切换其他城市,同时重新加载所选城市的天气信息和生活指数。43 中原工学院信息商务学院毕业设计(论文)第5章详细设计本章将探讨基于Android平台的天气查询系统的设计与开发的详细设计与实现。5.1新建工程在程序开发阶段,首先确定“天气预报软件”的工程名称为TKWeather,然后根据程序模块设计的内容,建立TKWeather工程,TKWeather的工程文件结构如下所示:图5-1工程目录为了使源代码文件的结构更加清晰,TKWeather示例设置了多个命名空间中,分别用来保存用户界面、数据库、后台服务、和天气数据的源代码文件cn.kim.tkweather.activity窗体页面源代码包cn.kim.tkweather.adapter适配器源代码包cn.kim.tkweather.bean数据实体类cn.kim.tkweather.fragmentFragment包cn.kim.tkweather.service服务层源码包cn.kim.tkweather.ui自定义控件包cn.kim.tkweather.utils工具类源码包Android资源文件保存在/res的子目录中。/res/drawable43 中原工学院信息商务学院毕业设计(论文)目录中保存的是图像文件,/res/layout目录中保存的是布局文件,/res/values目录中保存的是用来定义字符串和颜色的文件,/res/xml目录保存的是XML格式的数据文件。所有在程序开发阶段可以被调用的资源都保存在这些目录中。5.2AndroidUI界面的实现在Android中用户界面都是布局在XML文件中的。这些XML文件放在工程/res/layout下面。这对以前熟悉java可视化编程的人来说可能有些不太习惯。可能有人疑问为什么要把布局文件放在XML文件里呢?其实有过web基础的都应该知道mvc框架,这是一种用于网站开发的非常优秀的思想,在安卓系统中,安卓开发人员把用户界面放在XML文档中定义,这样就可以让XML文档专门负责用户UI界面设置,而java程序专门负责业务实现,从而降低程序的耦合,便于程序的维护和扩展,符合mvc设计思想。在XML中Android开发人员放置了很多我们经常用到的一些组件,比如view,Button,EditText等,通过这些系统提供的控件,我们可以开发出我们想要的程序界面来。Layout是一类特殊的ViewGroup控件,它们本身并不显示任何的内容,存在的惟一原因就是其中的内部结构,能够更好地摆放它的子控件。比如Linearlayout(线性布局),可将子控件按水平或垂直方向按顺序排列下去;Tablelayout(表格布局),可以将子控件按照表格的形式,一枚枚放置好;Relativelayout(相对布局),实际应用中这个布局更灵活,它可以设定各个控件之间的对齐和排列关系,适合编写复杂的界面。有了Layout的存在,控件和控件之间不再是独立地存在,而是更有机地结合在一起,设定起来也更为方便。在本程序中用到的布局文件如图5-2所示:图5-2布局文件图43 中原工学院信息商务学院毕业设计(论文)5.3登陆注册模块的实现使用DbUtils.create方法创建用户数据库。根据输入的用户名查询NamePassWord,再判断系统中存储的密码与用户输入的是否一致,若一致则提示用户登陆成功,跳到系统主界面;否则提示用户输入正确的用户名密码。登陆注册界面如图5-3所示:图5-3登陆注册图登陆查询dbUtils.findFirst(Selector.from(NamePassWord.class).where("name","=",ed_name.getText().toString().trim()));注册查询dbUtils.findFirst(Selector.from(NamePassWord.class).where("name","=",ed_name.getText().toString().trim()))注册时,先从数据库查询是否存在该用户名。若存在,提示用户用户名已存在。否则使用DbUtils的save方法将用户信息保存到数据库中。43 中原工学院信息商务学院毕业设计(论文)5.4界面切换功能实现主界面包括天气页面、生活页面、我页面。实现了这样的一个效果:滑动界面出现拖拽效果,可翻动3屏,也可点击按钮翻动页面。如图5-4所示:图5-4界面切换图主界面利用ViewPager+Fragment实现切换功能,定义一个fragment的容器装主界面的天气、生活和我三个fragment。用自定义的MainFragmentPagerAdapter适配器将天气、生活和我呈现到主界面上。设置ViewPager的offscreenPageLimit属性为3,表示可翻动3屏。changeTabs(0)将天气模块作为第一屏呈现,即在主窗体加载时呈现。5.5天气模块的实现天气模块的功能有:实时天气、未来一周的天气、一周温度曲线图、下拉刷新。实时天气:显示所选城市实时天气状况,包括城市名称、天气描述、温度高低、风速、天气描述图片、日期、星期。未来天气:对未来6天的天气情况简要描述,天气描述、温度高低等数据,一周温度曲线图:更加形象的描述一周最高温最低温的天气变化,下拉刷新:触摸屏幕下拉到一定幅度,从网上重新获取天气数据并加载最新的天气信息,方便用户及时准确的获取天气信息。如图5-5所示:43 中原工学院信息商务学院毕业设计(论文)图5-5天气界面图5.5.1天气信息(1)获取数据天气数据是聚合数据提供的WebService中获取的,调试TKWeather时需要网络环境,数据的获取地址是http://v.juhe.cn/weather/index。请求示例http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申请的KEY。使用http.send(HttpRequest.HttpMethod.GET,url,requestCallBack)方法发送请求获取天气数据。需添加访问网络的权限。(2)解析数据使用阿里巴巴提供的json解析工具类,将请求到的json格式的数据解析为对应的实体类。代码如下:WeatherObjectobject=com.alibaba.fastjson.JSONObject.parseObject(contentString,WeatherObject.class);43 中原工学院信息商务学院毕业设计(论文)5.5.2温度曲线图的画法自定义LineChartView继承view,重写view的onDraw方法。在该方法中添加绘制温度曲线图的相关方法。温度曲线图包括竖线、最低温度折线和最高温度折线。drawBrokenLine绘制竖线,drawHeightBrokenLine绘制最高温度折线,drawLowBrokenLine绘制最低温度折线。5.5.3下拉刷新自定义RefreshableView继承LinearLayout,重写onTouchEvent方法。在该方法中捕获触摸点的移动,下拉到一定位置,显示下拉刷新;继续下拉,使用方法invalidate()使当前页面失效,导致重新绘制页面,重新发送请求加载数据。5.6生活模块的实现生活模块的主要功能是根据天气指数提供人们在穿衣、旅行、晨练、洗车等方面的建议。如图5-6所示:图5-6生活界面图LifeFragment创建时,发送请求从聚合数据提供的接口获取43 中原工学院信息商务学院毕业设计(论文)天气数据,解析数据封装到WeatherObject。在页面的各个TextView中呈现数据。5.7我模块的实现我模块包括:城市管理,通知提醒,意见反馈,关于四个功能。如图5-7所示:图5-7我界面图5.7.1城市管理的功能实现先从数据库中查询省份数据,将数据适配到ListView中供用户选择。当用户选择完省份后,查询该省份下面的市区信息适配到ListView中供用户选择。城市信息存储在Sqlite数据库中,表结构图如下。43 中原工学院信息商务学院毕业设计(论文)表5-1城市代码数据库Parent_id为1的地区信息表示省份。城市的Parent_id为它所对应的省份的id。5.7.2通知提醒功能实现系统启动时注册KimCoreService服务。在AndroidManifest.xml文件中添加服务信息。该服务将在安卓系统通知栏显示当天的天气情况。默认启动该服务。43 中原工学院信息商务学院毕业设计(论文)第6章系统测试系统测试,是针对整个系统进行的测试,是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。限于篇幅,本章在上一章的基础上对系统部分功能进行测试。6.1测试目的在程序写出来之后,就要对它进行测试,主要进行视觉、流畅度、系统反应等测试。系统测试依据测试任务要求的类型可分为有效性测试和验证测试两种类型。有效性测试以实现用户需求为根本点,确认软件的功能、性能和其他特性是否与用户的要求一致,内容包括:需求规格说明、用户文档、程序文档等的有效性确认。验证测试是检验软件开发个阶段,以阶段间的逻辑协调性、完备性和正确性。例如:需求分析是概要设计的依据,概要设计必须以满足需求为出发点和充分体现需求,使得阶段产品内容保持逻辑上的一致性和协调性。系统测试可应用多种测试方法来实现测试任务要求,墨盒测试和白盒测试是广泛使用的两种基本的测试方法。黑盒测试是功能、数据驱动测试或基于规格说明的测试。在不考虑程序内部结构和内部特性的情况下,测试者依据该程序功能上的输入输出关系,或是程序的外部特性来设计和选择测试用例,推断程序编码的正确性。白盒测试是结构测试、逻辑驱动测试或基于程序的测试。测试者熟悉程序的内部结构,依据程序模块的内部结构来设计测试用例,检测程序代码的正确性。系统测试可运用多种不同的测试策略来实现,最常用的方式是自底向上分阶段进行,对不同开发阶段的产品采用不同的测试方法进行检测,从独立程序模块开始,然后进行程序测试、设计测试到确认测试,最终进行系统测试,共分四个阶段:单元测试、集成测试、确认测试和系统测试。单元测试是单独检测各模块,验证程序模块和详细设计是否一致,消除程序模块内部逻辑上和功能上的错误和缺陷。一般采用白盒测试法。单元测试还检查模块界面的输入输出数据,判断模块是否符合设计要求、模块所涉及的局部数据结构的状况和改变、模块内部重要执行路径(包括出错处理路径)的正确性。集成测试是将已测试的模块组装进行检测,对照软件设计检测和排除子系统或系统结构上的错误。一般采用墨盒测试法。集成测试的重点是:检测模块接口之间的连接,发现访问公共数据结构可能引起的模块间的干扰,全局数据结构的不一致,测试软件系统或字系统输入输出处理 故障处理和容错等方面的能力。43 中原工学院信息商务学院毕业设计(论文)确认测试要求是按规定需求,逐项进行有效测试。检测软件的功能和性能及其他特性是否与用户的要求一致;一般采用墨盒测试法。确认测试的基本事项有:功能确认(以用户需求规格说明为依据,检测系统需求规定功能的实现情况)、配置确认(检查系统资源和设备的协调情况,确保开发软件的所有文档资料编写齐全,能够支持软件运行后的维护工作。文档资料包括:设计文档、源程序、测试文档和用户文档等)。系统测试是检测软件系统运行时与其他相关要素(硬件、数据库及操作人员等)的协调工作情况是否满足要求,包括性能测试、恢复测试和安全测试等内容。6.2测试环境软件的测试是软件工程过程的一个重要阶段,是在软件投入运行前,对软件需求分析、设计和编码各阶段产品的最终检查,是为了保证软件开发产品的正确性、完整性和一致性,从而检测软件错误、修正软件错误的过程。软件开发的目的是开发出实现用户需求的高质量、高性能的软件产品,软件测试以检查软件产品内容和功能特性为核心,是软件质量保证的关键步骤,也是成功实现软件开发目标的重要保障。本软件系统从以下几个方面进行测试。(1)网络目前网络有2G,2G/3G,3G,3G/4G,4G,wifi。通过统计查看每个网路的使用量。其中弱网络也许关注。特别是弱网络+低端机型,性能的瓶颈尤其容易碰触到。(2)内存使用虽然AndroidL版本正式使用ART代替Dalvik虚拟机运行机制,但是考虑到当前市场份额,我们再次仍重要关注Dalvik虚拟机内存管理机制。需要注意:在Android2.×系统上,Bitmaps存储在Navtivememory中,有recycle()进行释放,而android3.0之后,bitmaps则存储在dalvikheap中,由GC垃圾惠州机制进行回收释放。androidapp的内存问题主要发生在dalvikheap和navtiveheap上。而dalvikheap的内存问题最为常见:比如Activity内存泄漏,Bitmap内存泄漏,Bitmaps导致的内存溢出。(3)CPU监控在CPU持续使用较高或者不正常时,我们首先要确定APP相关进程的的占用,找到有问题的进程,在进一步跟进到具体线程,所以排除方位。比借助traceview和systemtrace进行分析。(4)流量通常来说APP流量使用最大的两部分是:43 中原工学院信息商务学院毕业设计(论文)服务端api交互,图片/css/js等cdn静态资源。减少这两个部分的资源个数和资源大小,能有效的限制流量的使用。另外还需要严格控制后台静默时流量的使用。6.3测试结果经测试,程序响应速度快、安全性高、信息处理速度快。系统能通过手机查看并显示天气数据,能够查询所选城市的天气情况,达到了预期的结果。虽然有点误差,但我们在还是给调出来了,看到的效果还是不错的。在性能等方面也进行了部分的测试,我们的天气查询软件,只要安卓手机是android2.2版本以上的都支持,但是由于不同的手机配置也不同,运行出来的效果会有差别。所以,我们希望用户可以在高配置的手机下使用,这样效果会更好。43 中原工学院信息商务学院毕业设计(论文)总结基于Android平台的天气软件开发终于完成了。由于Android智能手机日益普及,手机天气软件可以让用户随时随地了解天气,为用户的日常生活多一些帮助,让生活多一些舒适。从一开始什么都不懂到摸索着完成了这个软件,收获就很多。主要熟悉了Android环境的搭建、界面的控件、布局和美观设计、获取数据信息和整体设计方面的知识,在这个过程中通过模拟器显示出加载界面和选择城市天气界面的功能。在开发过程中,遇到了很多问题,比如:由于网络不稳定,代码不够健壮或者其它没有考虑到的问题,界面有时会出现界面不能显示,不能正常跳转等异常现象。最终都解决了。目前,这个软件运行良好。但是网络的不稳定性和代码的不够精细,对软件运行有一定的影响。与此同时,这个软件还可以进一步发展,比如“自定义壁纸”、“设置提醒”等功能,所以,基于Android平台的开发技术还需要在日后不断探索、研究,以建立实用的天气预报软件。43 中原工学院信息商务学院毕业设计(论文)致谢本论文的设计和撰写过程中,感谢王丽伟老师给予的帮助,王老师在忙碌的教学工作中抽身出来,给予了许多重要的指导,拓展了我的思路,使得我得以完成了任务。在界面设计与异常处理中,亲身经历了从基础再到实践的过程,开拓了我的眼界,使我意识到现代化智能手机上的天气软件的发展,以及它的优越性。虽然以前没有学过软件开发,但是这次通过我对Android操作系统的了解,掌握了天气软件开发的基本规律,从而对本专业有更深刻的认识。此后,我会加倍努力的去研究,在熟练的基础上掌握更多的技术,来提高自己的开发水平。通过这一阶段的学习和研究,该系统终于完成,虽然耗费了许多精力和时间,但从另一方面它验证了我的知识能力,让我有了不断提高自身素质的意识。最后,我也衷心的感谢中原工学院信息商务学院对我的精心栽培,良好的校园环境、精良的师资队伍和浓厚的校园文化都让我深深怀念,都为我进入社会提供了莫大的帮助。43 中原工学院信息商务学院毕业设计(论文)参考文献[1]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011[2]王向辉,张国印,沈洁.Android应用程序开发[M].北京:清华大学出版社,2010.3[3]王向辉,张国印,沈洁.Android应用程序开发[M].北京:清华大学出版社,2010.3[4](美)CayS.Horstmann;GaryCornell.Java核心技术[M]. 北京:机械工业出版社,2008[5](美)EdBurnette.Android基础教程[M].北京:人民邮电出版社,2010[6]郭志宏.Android应用开发详解[M].北京:电子工业出版社,2010.[7]杨丰盛.Android应用开发揭秘[M].北京:机械工业出版社,2010.[8]靳岩,姚尚朗.GoogleAndroid开发入门与实践[M].北京:人民邮电出版社,2009.[9][美]EdBurnette.Android基础教程[M].北京:人民邮电出版社,2010[10]吴亚峰.Android开发设计[J].计算机报,2011-03-05[11]郝玉龙.Android开发讲议[J].清华学报,2011-06-04,2011(6)[12]杨海波.Android手机系统讲座[J].电脑报2011-06-01,2011(6)[13] 景保玉.2010中国移动应用开发现状与趋势大调查[J],2011.01.12[14]EdBurnett,Hello,Android:IntroducingGoogle’sMobileDevelopmentPlatform[J].PRAGMATICBOOKSHELF,2010.07:10-11[15]N.V.ChalapathiRao,C.Paton,B.Lehmann.OriginanddiamondprospectivityofMesoproterozoickimberlitesfromtheNarayanpetfield,EasternDharwarCraton,southernIndia:insightsfromgroundmassmineralogy,bulk-chemistryandperovskiteoxybarometry[J].GeologicalJournal,2012,47(2-3)[16]GONGLei,ZHOUCong.DevelopmentandResearchofMobileTerminationApplicationBasedonAndroid[J].ComputerAndModernization.2008.8[17]Rick Rogers,John Lombardo.AndroidApplicationDevelopment[M].O’ReillyMedia,Inc.2009[18]HasemanChris.AndroidEssentials[M].Apress:theExpert’sVoice,2008:156-160[19]DiMarzia,Jerome.Android:AProgrammer’sGuide[M].McGraw-Hill,2008:85-120[20]HyunJungLa.AService-basedApproachtoDevelopingAndroidMobileInternetDevice(MID)Applications[M].NewYork:2007.1-743 中原工学院信息商务学院毕业设计(论文)附录附录A:主要源程序基于Android平台的天气查询系统的设计与开发1注册登录publicvoidonClick(Viewv){intid=v.getId();if(id==R.id.btn_login){if(TextUtils.isEmpty(ed_name.getText().toString().trim())||ed_name.getText().toString().trim()==""){Toast.makeText(LoginActivity.this,"请输入正确的用户名",Toast.LENGTH_SHORT).show();}elseif(TextUtils.isEmpty(ed_password.getText().toString().trim())||ed_name.getText().toString().trim()==""){Toast.makeText(LoginActivity.this,"请输入正确的密码",Toast.LENGTH_SHORT).show();}else{NamePassWordnamePassWord;try{namePassWord=dbUtils.findFirst(Selector.from(NamePassWord.class).where("name","=",ed_name.getText().toString().trim()));if(namePassWord.getPassword().equals(ed_password.getText().toString().trim())){SPUtils.put(LoginActivity.this,SPConstant.ISREFISTER,true);startActivity(newIntent(this,MainActivity.class));this.finish();}else{Toast.makeText(LoginActivity.this,"请输入正确的用户名或密码",Toast.LENGTH_SHORT).show();}}catch(DbExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(NullPointerExceptione){Toast.makeText(LoginActivity.this,"请输入正确的用户名信息",Toast.LENGTH_SHORT).show();}}}elseif(id==R.id.btn_register){startActivity(newIntent(this,RegisterActivity.class));this.finish();2页面切换源代码publicclassMainActivityextendsFragmentActivity{RefreshDaTaBroadcastReceiverreceiver;publicstaticfinalStringREFRESH_DATA="cn.kim.tkweather.activitymainffdrefef";privateMainFragmentPagerAdapteradapter;@ViewInject(R.id.main_tabs_layout)privateLinearLayouttabsLayout;@ViewInject(R.id.main_viewpager)privateControlScrollViewPagerviewPager;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){43 中原工学院信息商务学院毕业设计(论文)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewUtils.inject(this);initView();setTabsListener();loadData();startService(newIntent(this,KimCoreService.class));}privatevoidloadData(){//TODOAuto-generatedmethodstubHttpXUtils.GET.execute(UrlUtils.WeatherUrl((String)SPUtils.get(this,SPConstant.VILLAGENAME,"郑州")),newRequestCallBack(){@OverridepublicvoidonSuccess(ResponseInfoarg0){//TODOAuto-generatedmethodstubStringcontentString=arg0.result;WeatherObjectobject=com.alibaba.fastjson.JSONObject.parseObject(contentString,WeatherObject.class);if(object.getResultcode().equals("200")){T.showShort(MainActivity.this,"更新成功");SPUtils.put(MainActivity.this,SPConstant.WEATEROBJECT,arg0.result);sendBroadcast(newIntent(WeatherFragment.REFRESH_DATA));sendBroadcast(newIntent(LifeFragment.REFRESH_DATA));}else{T.showShort(MainActivity.this,object.getReason());}}@OverridepublicvoidonFailure(HttpExceptionarg0,Stringarg1){//TODOAuto-generatedmethodstubsendBroadcast(newIntent(WeatherFragment.REFRESH_DATA));3天气页面publicclassWeatherFragmentextendsFragment{privateRefreshableViewmRefreshableView;publicstaticfinalStringREFRESH_DATA="cn.kim.tkweather.weatherfragment.reshefdf";RefreshDaTaBroadcastReceiverreceiver;@SuppressWarnings("unused")privateTextViewtv_cityName,tv_date,tv_sk,tv_today;//显示天气图片privateImageViewivWeather;WeatherObjectweatherObject;privateRelativeLayoutlayout_chart;privateGridViewweatherGridView;publicstaticWeatherFragmentfragment;publicstaticFragmentgetWeatherFragment(){//单例模式if(fragment==null){fragment=newWeatherFragment();returnfragment;}else{returnfragment;}}43 中原工学院信息商务学院毕业设计(论文)@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){returnView.inflate(getActivity(),R.layout.fragment_weather,null);}@OverridepublicvoidonActivityCreated(BundlesavedInstanceState){super.onActivityCreated(savedInstanceState);receiver=newRefreshDaTaBroadcastReceiver();getActivity().registerReceiver(receiver,newIntentFilter(REFRESH_DATA));initView();}WeatherResultweatherResult;LiveSkliveSk;//实时天气WeatherTodayweatherToday;//今天天气Listfutures;//未来天气ListtempList;ListheightTempList;ListlowTempList;floatbaseTemp=4;privatestaticMapweathers;privatevoidinitView(){weatherObject=JSONObject.parseObject((String)SPUtils.get(getActivity(),SPConstant.WEATEROBJECT,UrlUtils.STRING),WeatherObject.class);if(!weatherObject.getResultcode().equals("200")){return;}weatherResult=weatherObject.getResult();liveSk=weatherResult.getSk();weatherToday=weatherResult.getToday();futures=weatherResult.getFuture();tv_cityName=(TextView)getActivity().findViewById(R.id.tv_cityName);tv_date=(TextView)getActivity().findViewById(R.id.tv_date);tv_date.setText(weatherToday.getDate_y()+""+weatherToday.getWeek());//显示天气图片ivWeather=(ImageView)getActivity().findViewById(R.id.ivWeather);intimageId=getWeatherImage(weatherToday.getWeather());Drawabledrawable=getResources().getDrawable(imageId);ivWeather.setImageDrawable(drawable);tv_sk=(TextView)getActivity().findViewById(R.id.tv_sk);tv_today=(TextView)getActivity().findViewById(R.id.tv_today);tv_cityName.setText(weatherToday.getCity());SPUtils.put(getActivity(),SPConstant.VILLAGENAME,weatherToday.getCity());//实况天气//"实况天气"+"n"+//+"n"+"更新时间:"+liveSk.getTime()tv_sk.setText("温度:"+liveSk.getTemp()+"℃n"+"风向:"+liveSk.getWind_direction()+"n"+"风力:"+liveSk.getWind_strength()+"n"+"湿度:"+liveSk.getHumidity());SPUtils.put(getActivity(),SPConstant.STATUSDATA,weatherToday.getCity()+""+"温度:"+liveSk.getTemp()+""+"风向:"+liveSk.getWind_direction()+""+"风力:"+liveSk.getWind_strength()+""+"湿度:"+liveSk.getHumidity()+""+"更新时间:"+liveSk.getTime());43 中原工学院信息商务学院毕业设计(论文)weatherGridView=(GridView)getActivity().findViewById(R.id.weather_gridview);weatherGridView.setAdapter(newWeatherFutureAdapter(getActivity(),futures));tempList=newArrayList();tempList.clear();for(inti=0;i<7;i++){tempList.add((float)(0+2*i));//0-12代表0-48度所以4度一个刻度}WeatherFuturefuture;heightTempList=newArrayList();heightTempList.clear();for(inti=0;i();lowTempList.clear();for(inti=0;i();weathers.put("晴",R.drawable.qing);weathers.put("多云",R.drawable.duoyun);weathers.put("阴",R.drawable.yin);weathers.put("雷阵雨",R.drawable.leizhenyu);weathers.put("小雨",R.drawable.xiaoyu);weathers.put("小雪",R.drawable.xiaoxue);weathers.put("暴雨",R.drawable.baoyu);weathers.put("晴转多云",R.drawable.duoyun);43 中原工学院信息商务学院毕业设计(论文)weathers.put("多云转阴",R.drawable.duoyun);}/***获取今天天气图片*@paramweather*@return*/privateintgetWeatherImage(Stringweather){Iteratorit=weathers.entrySet().iterator();while(it.hasNext()){Map.Entryentry=(Entry)it.next();if(entry.getKey().equals(weather)){returnentry.getValue();}}returnR.drawable.qing;}@OverridepublicvoidonDestroyView(){super.onDestroy();if(receiver!=null){getActivity().unregisterReceiver(receiver);}}classRefreshDaTaBroadcastReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){//TODOAuto-generatedmethodstubif(intent.getAction().equals(REFRESH_DATA)){initView();if(mRefreshableView!=null){mRefreshableView.finishRefresh();4生活页面publicvoidonActivityCreated(BundlesavedInstanceState){super.onActivityCreated(savedInstanceState);receiver=newRefreshDaTaBroadcastReceiver();getActivity().registerReceiver(receiver,newIntentFilter(REFRESH_DATA));initView();}WeatherObjectweatherObject;WeatherResultweatherResult;WeatherTodayweatherToday;//今天天气privatevoidinitView(){weatherObject=JSONObject.parseObject((String)SPUtils.get(getActivity(),SPConstant.WEATEROBJECT,UrlUtils.STRING),WeatherObject.class);if(!weatherObject.getResultcode().equals("200")){return;}weatherResult=weatherObject.getResult();weatherToday=weatherResult.getToday();tv_today=(TextView)getActivity().findViewById(R.id.tv_today_data);43 中原工学院信息商务学院毕业设计(论文)tv_dressing_index=(TextView)getActivity().findViewById(R.id.tv_dressing_index);tv_dressing_advice=(TextView)getActivity().findViewById(R.id.tv_dressing_advice);tv_uv_index=(TextView)getActivity().findViewById(R.id.tv_uv_index);tv_comfort_index=(TextView)getActivity().findViewById(R.id.tv_comfort_index);tv_wash_index=(TextView)getActivity().findViewById(R.id.tv_wash_index);tv_travel_index=(TextView)getActivity().findViewById(R.id.tv_travel_index);tv_exercise_index=(TextView)getActivity().findViewById(R.id.tv_exercise_index);tv_drying_index=(TextView)getActivity().findViewById(R.id.tv_drying_index);tv_today.setText(weatherToday.getCity()+""+weatherToday.getDate_y()+""+weatherToday.getWeek()+"n"+"n"+weatherToday.getWeather()+""+weatherToday.getWind()+"n"+"n"+weatherToday.getTemperature());tv_dressing_index.setText("穿衣指数:"+weatherToday.getDressing_index());tv_dressing_advice.setText("穿衣建议:"+weatherToday.getDressing_advice());tv_uv_index.setText("紫外线强度:"+weatherToday.getUv_index());tv_comfort_index.setText("舒适度:"+weatherToday.getComfort_index());tv_wash_index.setText("洗车指数:"+weatherToday.getWash_index());tv_travel_index.setText("旅游指数:"+weatherToday.getDrying_index());tv_exercise_index.setText("晨练指数:"+weatherToday.getExercise_index());tv_drying_index.setText("干燥指数:"+weatherToday.getDrying_index());}@OverridepublicvoidonDestroyView(){super.onDestroy();if(receiver!=null){getActivity().unregisterReceiver(receiver);}}classRefreshDaTaBroadcastReceiverextendsBroadcastReceiver{@OverridepublicvoidonReceive(Contextcontext,Intentintent){//TODOAuto-generatedmethodstubif(intent.getAction().equals(REFRESH_DATA)){initView();5我页面publicvoidonActivityCreated(BundlesavedInstanceState){super.onActivityCreated(savedInstanceState);initView();}booleanisOpen=false;privatevoidinitView(){mine_loginout_btn=(Button)getActivity().findViewById(R.id.mine_loginout_btn);mine_loginout_btn.setOnClickListener(this);about_layout=(RelativeLayout)getActivity().findViewById(R.id.about_layout);about_layout.setOnClickListener(this);suggest_layout=(RelativeLayout)getActivity().findViewById(R.id.suggest_layout);suggest_layout.setOnClickListener(this);setting_layout=(RelativeLayout)getActivity().findViewById(R.id.setting_layout);setting_layout.setOnClickListener(this);43 中原工学院信息商务学院毕业设计(论文)tv_now_cityname=(TextView)getActivity().findViewById(R.id.tv_now_cityname);tv_now_cityname.setText((String)SPUtils.get(getActivity(),SPConstant.VILLAGENAME,"郑州"));imageView_openstatus=(ImageView)getActivity().findViewById(R.id.imageView_openstatus);imageView_openstatus.setOnClickListener(this);isOpen=(Boolean)SPUtils.get(getActivity(),SPConstant.ISOPENSTUTAS,false);if(isOpen){imageView_openstatus.setBackgroundResource(R.drawable.btn_on);}elseif(!isOpen){imageView_openstatus.setBackgroundResource(R.drawable.btn_off);getActivity().sendBroadcast(newIntent(KimCoreService.CLOSE_STATUS));}}@OverridepublicvoidonDestroyView(){super.onDestroy();}privateCitycity;@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubintid=v.getId();if(id==R.id.mine_loginout_btn){SPUtils.put(getActivity(),SPConstant.ISREFISTER,false);startActivity(newIntent(getActivity(),LoginActivity.class));getActivity().finish();}elseif(id==R.id.about_layout){Toast.makeText(getActivity(),"版本:1.0"+"n"+"日期:2015.05.01"+"n"+"作者:田凯",Toast.LENGTH_LONG).show();}elseif(id==R.id.suggest_layout){startActivity(newIntent(getActivity(),HelpFeedbackActivity.class));}elseif(id==R.id.imageView_openstatus){if(isOpen){imageView_openstatus.setBackgroundResource(R.drawable.btn_off);SPUtils.put(getActivity(),SPConstant.ISOPENSTUTAS,false);isOpen=false;getActivity().sendBroadcast(newIntent(KimCoreService.CLOSE_STATUS));}elseif(!isOpen){imageView_openstatus.setBackgroundResource(R.drawable.btn_on);SPUtils.put(getActivity(),SPConstant.ISOPENSTUTAS,true);isOpen=true;getActivity().sendBroadcast(newIntent(KimCoreService.OPEN_STATUS));}}elseif(id==R.id.setting_layout){Intentin=newIntent(getActivity(),CitySelectActivity.class);in.putExtra("city",city);startActivityForResult(in,1);}}@OverridepublicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){super.onActivityResult(requestCode,resultCode,data);if(resultCode==1){43 中原工学院信息商务学院毕业设计(论文)city=data.getParcelableExtra("city");tv_now_cityname.setText(city.getCity());SPUtils.put(getActivity(),SPConstant.VILLAGENAME,city.getCity());getActivity().sendBroadcast(newIntent(MainActivity.REFRESH_DATA));}}}43 中原工学院信息商务学院毕业设计(论文)附录B:软件使用说明书基于Android平台的天气查询系统的设计与开发1系统概述本软件是一个天气查询App应用程序,启动程序后可以查询所选城市的天气信息,有一个显示天气情况的用户界面,通过图片和文字显示当前和未来几天的天气状况,包括温度、湿度、风向和雨雪情况等。这些天气数据是通过后台服务获取的,这个后台服务按照一定时间间隔,从互联网上上获取天气预报信息,并将天气信息保存在数据库中。此App具备以下主要功能:(1)注册登录;(2)天气模块显示今天及未来6天的天气信息;并将最低温度、最高温度以曲线图的方式显示;(3)生活模块包含:穿衣/雨具/紫外线/洗车等生活指数;(4)我模块包含:城市管理/通知提醒/意见反馈//关于等;2运行说明1软件环境:window7eclipseandroidSDKandroidADT2本天气查询系统使用的是聚合数据全国天气预报接口,聚合数据首次申请可以免费查询500次,如果免费次数用完,可以再注册个聚合数据账号,申请一个APPKEY.在工程中将cn.kim.tkweather.utils下UrlUtils类中的再次替换即可3服务与支持如果在本系统使用过程中遇到问题和困难,可以向系统开发人员询问。咨询邮箱:903662459@qq.com.43 中原工学院信息商务学院毕业设计(论文)附录C:光盘光盘说明1目录结构该光盘有:毕业论文、外文翻译、文献综述、开题报告、毕业论文相关文件、答辩ppt一个源程序压缩包(包括数据库和各种插件jar包) 2文件说明压缩包源程序在一个文件中。各种文档在另一个文件夹中。43'