基于android的天气预报软件的设计与实现_第1页
基于android的天气预报软件的设计与实现_第2页
基于android的天气预报软件的设计与实现_第3页
基于android的天气预报软件的设计与实现_第4页
基于android的天气预报软件的设计与实现_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于ANDROID的天气预报软件的设计与实现摘要本课题研究基于ANDROID平台上的天气预报软件,该工具可以为用户提供最新的天气预报信息,以便用户及时了解最新的天气状况。本论文对基于ANDROID平台的天气预报软件的开发技术进行了分析和研究。先简要介绍了ANDROID开发必备基础知识,再切入软件的具体实现过程。软件的实现是利用网络接口和中国天气网获取网络XML文件,然后通JSON解析取得城市天气信息。本论文首先介绍系统的开发背景和意义,接着详细介绍系统设计以及实现的过程,最后介绍了系统测试和本软件的测试用例以及总结了本次毕业设计整个过程。关键词ANDROID;天气预报;WEBSERVICEDESIGNANDIMPLEMENTATIONOFWEATHERFORECASTBASEDONANDROIDABSTRACTTHISTOPICRESEARCHBASEDONWEATHERFORECASTSOFTWAREONTHEANDROIDPLATFORMWHICHCANPROVIDESUSERSWITHTHELATESTWEATHERFORECASTINFORMATION,SOTHATUSERSCANUNDERSTANDTHELATESTWEATHERCONDITIONSINATIMELYMANNERINTHISPAPER,THEWEATHERFORECASTSOFTWAREDEVELOPMENTTECHNOLOGYBASEDONTHEANDROIDPLATFORMISANALYZEDANDSTUDIEDITFIRSTBRIEFLYINTRODUCESTHEANDROIDDEVELOPMENTESSENTIALBASICKNOWLEDGE,THENCUTINTOTHESOFTWAREIMPLEMENTATIONPROCESSTHEREALIZATIONOFTHESOFTWAREISTHEUSEOFTHENETWORKINTERFACEANDCHINESEWEATHERNETACCESSNETWORKXMLFILE,ANDTHENPASSTHEXMLDOCUMENTPARSEDBYJSONTOGETCITYWEATHERINFORMATIONTHISPAPERFIRSTLYINTRODUCESTHEDEVELOPMENTOFTHESYSTEMBACKGROUNDANDSIGNIFICANCE,THENINTRODUCESSYSTEMDESIGNANDIMPLEMENTATIONPROCESS,FINALLYINTRODUCESTHESYSTEMTESTINGANDTHESOFTWARETESTCASESANDSUMMARIZESTHEWHOLEPROCESSOFTHEGRADUATIONDESIGNKEYWORDSANDROIDWEATHERFORECASTWEBSERVICE目录摘要IABSTRACTII1绪论111课题研究背景和研究意义112当前研究现状113课题的研究内容114论文框架安排22开发语言说明321开发语言简介3211ANDROID简介3212ANDROID系统特性3213ANDROID基本框架(ANDROIDARCHITECTURE)3214ANDROID系统的四大组件5215SQLITE简介622搭建ANDROID开发环境623了解JASON的相关知识924HANDLER、INTENT和监听器123概要设计1531概述15311系统分析的原则15312系统分析的方法1532系统可行性分析1533系统需求分析1634性能需求分析17341实用性原则17342可扩展性与可维护性原则17343安全可靠性原则17344用户界面美观原则17345准确性原则17346易用性原则1735系统流程分析1736项目模块划分184详细设计1941设计目标1942总体结构设计1943文件结构设计1944各模块设计21441主界面模块设计21442更换城市界面模块设计23443网络接口模块设计25444自动定位模块设计2545数据库设计265系统实现与测试2951系统实现29511天气主界面实现29512更改城市模块实现3052系统测试31521软件测试31522测试用例31523测试总结366总结37参考文献38致谢39外文文献原文40外文文献译文481绪论11课题研究背景和研究意义随着科技的发展,ANDROID在中国的前景十分广阔。国内厂商和许多大运营商也纷纷加入了ANDROID的阵营,不断的推出了ANDROID系统的产品。ANDROID是一种以LINUX为基础的开放源码操作系统,主要使用于便携设备。ANDROID操作系统最初由ANDYRUBIN开发,最初主要支持手机。2005年由GOOGLE收购注资并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。2011年第一季度,ANDROID在全球的市场份额首次超过塞班系统,跃居全球第一。2012年第三季度,安卓的市场份额高达748,一年前则为574。2013年第一季度,它的市场份额继续增加,达到75。ANDROID平台的天气预报软件的开发可以进一步扩大天气信息的覆盖面,以便提前预防,使得广大公众能够在第一时间方便且快捷地获取最新的天气预报信息。同时也可以完善公共服务体系,提高公共服务质量,更好地发挥气象事业对经济社会发展的现实性作用。这款天气预报软件给人们带来方便快捷的全天候天气信息,必将成为人们日常生活中必不可少的一部分。本系统界面明了,操作简单,适合所有年龄段的使用。对于人们生活水平的提高有一定的促进作用。12当前研究现状ANDROID是GOOGLE开发的基于LINUX平台的开源手机操作系统。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件。作为谷歌企业战略的重要组成部分,ANDROID将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。国内外的基于ANDROID的天气预报软件相当多,这些软件都具有的最基本的功能,当然就是提供当前天气状况,包括实时温度,当天最高温和最低温,风向风速以及未来若干天的天气概况,数据来源都是各个国家或地区的气象局或天气开放平台。而现在大多数天气预报软件都具有强大且丰富的附加功能,且界面美观人性化。在国内做的比较好的天气软件当属墨迹天气。这款软件功能相当丰富,可以添加多个城市并通过左右滑动切换城市;提供所选城市的实时天气情况,包括当前天气状况,实时温度,当天最高温和最低温,湿度值,PM25值,风向风速;可以查看未来一周的温度趋势图;可以查看生活贴士,包括穿衣指数,运动指数,洗车指数等;城市实景天气,每个软件用户都可以查看其他用户上传的其所在地的图片;另外,其界面非常美观且人性化,比如软件的背景图片就是动态天气壁纸,可以随着天气的变化而变化。ANDROID的一大特色就是支持各种桌面插件,而墨迹天气充分利用了这一点,提供了非常丰富的桌面天气插件,显示的信息也可由用户设置。总之,目前墨迹天气是国内做的非常出色的一款天气软件。13课题的研究内容本课题要在ANDROID平台上借助网络接口完成天气预报软件的设计与实现,本软件具有城市选择、查询结果显示等功能。本课题所用到的开发工具为GOOGLE为ANDROID开发者提供的开发工具包ADT(ANDROIDDEVELOPERTOOLS),包括ECLIPSE和SDK,并用JAVA语言完成。本课题遵循了软件工程面向对象的基本原理,利用原型模型,将需求分析、设计、实现和测试过程进行反复迭代,完成了界面、逻辑功能和数据库的设计与实现,最终得到了符合设计要求的软件。本系统研究的是ANDROID平台天气预报软件的实现过程,通过移动网络的支持以及ANDROID平台提供的网络服务支持,通过HTTP的方式获取来自中国天气网最新的天气预报数据,中国天气网免费为用户提供天气预报接口,开发者可以获取国内各个城市的实时天气情况,获取地址为HTTP/MWEATHERCOMCN/DATA/101280101HTML。14论文框架安排本文详细介绍了基于ANDROID平台的天气预报软件的设计实现全过程。从开始到程序设计的实现,将在以下的几章中予以介绍第1章绪论,这一章主要讲述了课题研究的背景、意义、内容和当前研究现状以及论文框架的安排。第2章开发语言简介,对涉及到的理论知识和使用到的开发工具做相关介绍。第3章概要设计,主要分析了本软件开发的可行性和需求分析等。第4章详细设计,主要介绍了本软件各模块的实现过程以及数据库的设计。第5章系统实现与测试,主要介绍了本软件的实现结果和各模块的测试用例以及测试总结。第6章总结,总结近三个多月做毕业设计过程中的心得和体会。2开发语言说明21开发语言简介211ANDROID简介ANDROID本义指“机器人”,同时也是GOOGLE于2007年11月5日宣布的基于LINUX平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。ANDROID是一种基于LINUX的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由GOOGLE公司和开放手机联盟领导及开发。ANDROID操作系统最初由ANDYRUBIN开发,主要支持手机。2005年8月由GOOGLE收购注资。2007年11月,GOOGLE与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良ANDROID系统。随后GOOGLE以APACHE开源许可证的授权方式,发布了ANDROID的源代码。第一部ANDROID智能手机发布于2008年10月。2013年的第四季度,ANDROID平台手机的全球市场份额已经达到781。2013年09月24日谷歌开发的操作系统ANDROID在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。ANDROID采用了软件堆层的架构,低层以LINUX内核工作为基础,只提供基本功能,其他的应用软件则由各公司自行开发。目前最新SDK版本为ANDROID442。212ANDROID系统特性ANDROID系统有如下的几大特性(1)应用程序框架,支持组件的重用与替换;(2)DALVIK虚拟机,专门为移动设备做了优化;(3)内部集成浏览器,该浏览器基于开源的WEBKIT引擎;(4)优化的图形库,包括2D和3D图形库;(5)SQLITE,用作结构化的数据存储;(6)多媒体支持,包括常见的音频、视频和静态印象文件格式;(7)丰富的开发环境,包括设备模拟器,调试工具,内存及性能分析图表和ECLIPSE集成开发环境插件。213ANDROID基本框架(ANDROIDARCHITECTURE)ANDROID平台的基本框架如图21所示图21ANDROID基本框架图1应用程序层ANDROID会同一个核心应用程序包一起发布,该应用程序包包括EMAIL客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。2应用程序框架层开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统,其中包括丰富而又可扩展的视图,可以用来构建应用程序,它包括列表,网格,文本框,按钮,甚至可嵌入的WEB浏览器。A内容提供器使得应用程序可以访问另一个应用程序的数据(如联系人数据库,或者共享它们自己的数据。B资源管理器提供非代码资源的访问,如本地字符串,图形,和布局文件。C通知管理器使得应用程序可以在状态栏中显示自定义的提示信息。D活动管理器用来管理应用程序生命周期并提供常用的导航回退功能。3LIBRARIES库层ANDROID包含一些C/C库,这些库能被ANDROID系统中不同的组件使用。它们通过ANDROID应用程序框架为开发者提供服务。以下是一些核心库A系统C库一个从BSD继承来的标准C系统函数库LIBC,它是专门为基于EMBEDDEDLINUX的设备定制的。B媒体库基于PACKETVIDEOOPENCORE该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。CSURFACEMANAGER对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。DLIBWEBCORE一个最新的WEB浏览器引擎用,支持ANDROID浏览器和一个可嵌入的WEB视图。4系统结构ANDROID是运行于LINUXKERNEL之上,ANDROID的LINUXKERNEL控制包括安全,存储器管理,程序管理,网络堆栈,驱动程序模型等。APK是安卓应用的后缀,是ANDROIDPACKAGE的缩写,即ANDROID安装包APK。通过将APK文件直接传到ANDROID模拟器或ANDROID手机中执行即可安装。214ANDROID系统的四大组件在ANDROID系统中,为我们提供了四大基本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像ACTIVITY,CONTENTPROVIDER是可见的视图,SERVICE和BROADCASTRECEIVER是不可见的,它们只在系统的后台运行。下面分别介绍四大组件1ACTIVITY简介ANDROID中,所有程序都运行在ACTIVITY中,是ANDROID最基本的组成部分之一。在ANDROID程序中,ACTIVITY一般代表手机屏幕的一屏。ACTIVITY就相当于浏览器中的一个网页,并且可以添加BUTTON、CHECKBOX等控件。一个ANDROID应用是由多个ACTIVITY组成的。这多个ACTIVITY之间可以进行相互跳转,例如,按下一个BUTTON按钮后,可能会跳转到其他的ACTIVITY。和网页跳转稍微有些不一样的是,ACTIVITY之间的跳转有可能返回值,例如,从ACTIVITYA跳转到ACTIVITYB,那么当ACTIVITYB运行结束的时候,有可能会给ACTIVITYA一个返回值。当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的移除一些没有必要保留的屏幕,因为ANDROID会把每个应用的开始到当前的每个屏幕保存在堆栈中。2SERVICE简介SERVICE是ANDROID系统中的一种组件,它跟ACTIVITY的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。SERVICE是没有界面的长生命周期的代码。SERVICE是一种程序,它可以运行很长时间,但是它却没有用户界面。SERVICE可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他ACTIVITY这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录地理信息位置的改变等。开启SERVICE有两种方式ACONTEXTSTARTSERVICE()SERVICE会经历ONCREATEONSTART(如果SERVICE还没有运行,则ANDROID先调用ONCREATE()然后调用ONSTART();如果SERVICE已经运行,则只调用ONSTART(),所以一个SERVICE的ONSTART方法可能会重复调用多次);STOPSERVICE的时候直接ONDESTROY,如果是调用者自己直接退出而没有调用STOPSERVICE的话,SERVICE会一直在后台运行。该SERVICE的调用者再启动起来后可以通过STOPSERVICE关闭SERVICE。BCONTEXTBINDSERVICE()SERVICE会经历ONCREATE()ONBIND(),ONBIND将返回给客户端一个IBIND接口实例,IBIND允许客户端回调服务的方法,比如得到SERVICE运行的状态或其他操作。这个时候把调用者(CONTEXT,例如ACTIVITY)会和SERVICE绑定在一起,CONTEXT退出了,SREVICE就会调用ONUNBINDONDESTROYED相应退出,所谓绑定在一起就共存亡了。3BROADCASTRECEIVER简介在ANDROID中,BROADCAST是一种广泛运用的在应用程序之间传输信息的机制。而BROADCASTRECEIVER是对发送出来的BROADCAST进行过滤接受并响应的一类组件。可以使用BROADCASTRECEIVER来让应用对一个外部的事件做出响应。BROADCASTRECEIVER不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。BROADCASTRECEIVER通过NOTIFICATIONMANAGER来通知用户这些事情发生了。BROADCASTRECEIVER既可以在ANDROIDMANIFESTXML中注册,也可以在运行时的代码中使用CONTEXTREGISTERRECEIVER(进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用CONTEXTSENDBROADCAST()将它们自己的INTENTBROADCASTS广播给其他应用程序。4CONTENTPROVIDER简介CONTENTPROVIDER是ANDROID提供的第三方应用数据的访问方案。在ANDROID中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。ANDORID当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是CONTENTPROVIDER。应用想对外提供的数据,可以通过派生CONTENTPROVIDER类,封装成一枚CONTENTPROVIDER,每个CONTENTPROVIDER都用一个URI作为独立的标识,形如CONTENT/COMXXXXX。所有东西看着像REST的样子,但实际上,它比REST更为灵活。和REST类似,URI也可以有两种类型,一种是带ID的,另一种是列表的,但实现者不需要按照这个模式来做,给ID的URI也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。215SQLITE简介SQLITE是一款嵌入式的轻型数据库,它只占用很少的资源,有时只需几百K。它支持WINDOWS/LINUX/UNIX等操作系统,它能跟JAVA、C等程序设计语言相结合,还有ODBC接口。它处理数据的速度比MYSQL、POSTGRESQL等数据库都快。ANDROID作为目前主流的移动操作系统,完全符合SQLITE占用资源少的优势,故在ANDROID平台上,集成了一个嵌入式关系型数据库SQLITE。本数据库支持功能如下1自动建表,支持属性来自继承类可根据注解自动完成建表,并且对于继承类中的注解字段也支持自动建表。2自动支持增删改,增改支持对象化操作增删改是数据库操作的最基本单元,不用重复写这些增删改的代码,并且添加和更新支持类似于HIBERNATE中的对象化操作。3查询方式灵活支持ANDROID框架提供的方式,也支持原生SQL方式。4查询结果对象化对于查询结果可自动包装为实体对象,类似于HIBERNATE框架。5查询结果灵活查询结果支持对象化,也支持结果为LIST形式,这个方法在实际项目中很实用,且效率更好些。22搭建ANDROID开发环境任何事物要运行,都要有它的环境,ANDROID也有它的环境才能够运行,下面介绍ANDROID的开发环境配置。搭建开发环境需要的环境1操作系统WINDOWS7;2下载JDKHTTP/WWWORACLECOM/TECHNETWORK/JAVA/JAVASE/DOWNLOADS/INDEXHTML,安装JDK。我的安装目录是CPROGRAMFILESJAVAJDK170_07和CPROGRAMFILESJAVAJRE7,如图22所示图22JDK安装目录3下载ANDROIDSDK工具包ADTBUNDLEWINDOWSX86,HTTP/DEVELOPERANDROIDCOM/SDK/INDEXHTML,包含ECLIPSE和SDK,版本是ADTBUNDLEWINDOWSX8620131030。解压缩ADTBUNDLEWINDOWSX86包,我的安装路径是FADTBUNDLEWINDOWSX86,里面包含ECLIPSE和SDK,还有一个SDKMANAGER,SDK下载如图23所示图23SDK下载4配置环境变量,桌面计算机右键属性高级系统设置高级环境变量变量名JAVA_HOME变量值CPROGRAMFILESJAVAJDK170_07;具体如图24所示图24配置JAVA_HOME变量名PATH变量值JAVA_HOMEBINFADTBUNDLEWINDOWSX86SDKTOOLSFADTBUNDLEWINDOWSX86SDKPLATFORMTOOLS;具体如图25所示图25配置PATH变量名CLASSPATH变量值JAVA_HOMELIBTOOLSJARJAVA_HOMELIBDTJARJAVA_HOMELIB;具体如图26所示图26配置CLASSPATH5测试环境变量运行CMD,输入JAVA或者JAVAC测试命令看成功与否;具体如图27所示图27测试环境变量6相关SDK的更新,具体如图28所示图28SDK更新7配置ANDROID模拟器,具体如图29所示图29配置模拟器8点击START,运行模拟器,具体如图210所示图210运行模拟器至此,ANDROID开发环境已搭建完成。23了解JASON的相关知识JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是在JAVASCRIPT的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。1基本信息JSON,全称是JAVASCRIPTOBJECTNOTATION。它是基于JAVASCRIPT编程语言ECMA2623RDEDITIONDECEMBER1999标准的一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。跟XML相类似,它独立语言,在跨平台数据传输上有很大的优势。2基础结构JSON建构有两种结构A“名称/值”对的集合。不同的语言中,它被理解为对象,记录,结构,字典,哈希表,有键列表,或者关联数组。B值的有序列表。在大部分语言中,它被理解为数组。3具体形式A对象是一个无序的“名称/值对”集合。一个对象以“”(左括号)开始,“”(右括号)结束。每个“名称”后跟一个“”(冒号);“名称/值对”之间使用“,”(逗号)分隔。B数组是值的有序集合。一个数组以“”(左中括号)开始,“”(右中括号)结束。值之间使用“,”(逗号)分隔。C值可以是双引号括起来的字符串、数值、TRUE、FALSE、NULL、对象或者数组。这些结构可以嵌套。D字符串是由双引号包围的任意数量UNICODE字符的集合,使用反斜线转义。一个字符即一个单独的字符串。字符串与C或者JAVA的字符串非常相似。E数值与C或者JAVA的数值非常相似。除去未曾使用的八进制与十六进制格式,除去一些编码细节。4格式应用JSON是JAVASCRIPT原生格式,所以JAVASCRIPT中处理JSON数据不需要任何特殊的API或工具包。A将JSON数据赋值给变量例如,可以创建一个新的JAVASCRIPT变量,然后将JSON格式的数据字符串直接赋值给它VARPEOPLE“PROGRAMMERS“FIRSTNAME“BRETT“,“LASTNAME“MCLAUGHLIN“,“EMAIL“AAAA“,“FIRSTNAME“JASON“,“LASTNAME“HUNTER“,“EMAIL“BBBB“,“FIRSTNAME“ELLIOTTE“,“LASTNAME“HAROLD“,“EMAIL“CCCC“,“AUTHORS“FIRSTNAME“ISAAC“,“LASTNAME“ASIMOV“,“GENRE“SCIENCEFICTION“,“FIRSTNAME“TAD“,“LASTNAME“WILLIAMS“,“GENRE“FANTASY“,“FIRSTNAME“FRANK“,“LASTNAME“PERETTI“,“GENRE“CHRISTIANFICTION“,“MUSICIANS“FIRSTNAME“ERIC“,“LASTNAME“CLAPTON“,“INSTRUMENT“GUITAR“,“FIRSTNAME“SERGEI“,“LASTNAME“RACHMANINOFF“,“INSTRUMENT“PIANO“B访问数据上面的长字符串实际上只是一个数组,将这个数组放进JAVASCRIPT变量之后,就可以访问它。实际上,只需用点号表示法来表示数组元素。所以,要访问PROGRAMMERS列表的第一个条目的姓氏,只需在JAVASCRIPT中使用下面的代码PEOPLEPROGRAMMERS0LASTNAME所以,这行代码首先访问PEOPLE变量中的数据;然后移动到PROGRAMMERS的条目,再移动到第一个记录(0);最后,访问LASTNAME键的值。结果是字符串值“MCLAUGHLIN”。下面是使用同一变量的几个示例。PEOPLEAUTHORS1GENRE/VALUEIS“FANTASY“PEOPLEMUSICIANS3LASTNAME/UNDEFINEDTHISREFERSTOTHEFOURTHENTRY,ANDTHEREISNTONEPEOPLEPROGRAMMERS2FIRSTNAME/VALUEIS“ELLIOTTE“利用这样的语法,可以处理任何JSON格式的数据,而不需要使用任何额外的JAVASCRIPT工具包或API。C修改JSON数据可以按照点号和方括号访问数据的方式修改数据PEOPLEMUSICIANS1LASTNAME“RACHMANINOV“在将字符串转换为JAVASCRIPT对象之后,就可以修改变量中的数据。D转换回字符串在JAVASCRIPT中转换回字符串的代码如下STRINGNEWJSONTEXTPEOPLETOJSONSTRING这样就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作AJAX应用程序中的请求字符串。可以将任何JAVASCRIPT对象转换为JSON文本。如果对名为MYOBJECT的对象进行转换,只需执行相同形式的命令STRINGMYOBJECTINJSONMYOBJECTTOJSONSTRING这就是JSON与其他数据格式之间最大的差异。使用JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,就可以直接使用了。5基础示例JSON可以将JAVASCRIPT对象中表示的一组数据转换为字符串,然后就在函数之间传递这个字符串,或者在异步应用程序中将字符串从WEB客户机传递给服务器端程序。而且JSON可以表示比“名称/值对“更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。A表示名称/值对可以用下面的JSON表示“名称/值对“FIRSTNAME“BRETT“当将多个“名称/值对“串在一起时,JSON更容易使用,而且可读性更好。例如“FIRSTNAME“BRETT“,“LASTNAME“MCLAUGHLIN“,“EMAIL“AAAA“它明确地表示以上三个值都是同一记录的一部分,花括号使这些值有了某种联系。B表示数组当需要表示一组值时,JSON可以提高可读性,而且可以减少复杂性。例如,要表示一个人名列表。使用JSON只需将多个带花括号的记录分组在一起“PEOPLE“FIRSTNAME“BRETT“,“LASTNAME“MCLAUGHLIN“,“EMAIL“AAAA“,“FIRSTNAME“JASON“,“LASTNAME“HUNTER“,“EMAIL“BBBB“,“FIRSTNAME“ELLIOTTE“,“LASTNAME“HAROLD“,“EMAIL“CCCC“在这个示例中,只有一个名为PEOPLE的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。在处理JSON格式的数据时,不需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。24HANDLER、INTENT和监听器1HANDLER主要接受子线程发送的数据,并用此数据配合主线程更新UI当应用程序启动时,ANDROID首先会开启一个主线程也就是UI线程,主线程为管理界面中的UI控件,进行事件分发,比如说,要是点击一个BUTTON,ANDROID会分发事件到BUTTON上来响应操作。如果此时需要一个耗时的操作,例如联网读取数据,或者读取本地较大的一个文件的时候,不能把这些操作放在主线程中,如果放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到ANDROID系统的一个错误提示“强制关闭”。这个时候需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,ANDROID主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。这个时候,HANDLER就可以解决这个问题,由于HANDLER运行在主线程中UI线程中,它与子线程可以通过MESSAGE对象来传递数据,HANDLER就承担着接受子线程传过来的子线程用SEDMESSAGE方法传弟MESSAGE对象,里面包含数据,把这些消息放入主线程队列中,配合主线程进行更新UI。HANDLER可以分发MESSAGE对象和RUNNABLE对象到主线程中,每个HANDLER实例,都会绑定到创建他的线程中一般是位于主线程,它有两个作用安排消息或RUNNABLE在某个主线程中某个地方执行;安排一个动作在不同的线程中执行。HANDLER中分发消息的一些方法POSTRUNNABLEPOSTATTIMERUNNABLE,LONGPOSTDELAYEDRUNNABLELONGSENDEMPTYMESSAGEINTSENDMESSAGEMESSAGESENDMESSAGEATTIMEMESSAGE,LONGSENDMESSAGEDELAYEDMESSAGE,LONG以上POST类方法允许排列一个RUNNABLE对象到主线程队列中,SENDMESSAGE类方法,允许安排一个带数据的MESSAGE对象到队列中,等待更新。2INTENT协助ANDROID四种组件之间的通讯,负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,ANDROID则根据此INTENT的描述,负责找到对应的组件,将INTENT传递给调用的组件,并完成组件的调用。因此,INTENT起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。在应用中,有两种形式来使用INTENTA直接INTENT指定了COMPONENT属性的INTENT调用SETCOMPONENTCOMPONENTNAME或者SETCLASSCONTEXT,CLASS来指定。通过指定具体的组件类,通知应用启动对应的组件。B间接INTENT没有指定COMONENT属性的INTENT。这些INTENT需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此INTENT的组件。对于直接INTENT,ANDROID不需要去做解析,因为目标组件已经很明确,ANDROID需要解析的是间接INTENT,通过解析,将INTENT映射给可以处理此INTENT的ACTIVITY、INTENTRECEIVER或SERVICE。INTENT解析机制主要是通过查找已注册在ANDROIDMANIFESTXML中的所有INTENTFILTER及其中定义的INTENT,最终找到匹配的INTENT。在这个解析过程中,ANDROID是通过INTENT的ACTION、TYPE、CATEGORY这三个属性来进行判断的,判断方法如下如果INTENT指明定了ACTION,则目标组件的INTENTFILTER的ACTION列表中就必须包含有这个ACTION,否则不能匹配;如果INTENT没有提供TYPE,系统将从DATA中得到数据类型。和ACTION一样,目标组件的数据类型列表中必须包含INTENT的数据类型,否则不能匹配。如果INTENT中的数据不是CONTENT类型的URI,而且INTENT也没有明确指定它的TYPE,将根据INTENT中数据的SCHEME比如HTTP或者MAILTO进行匹配。如果INTENT指定了一个或多CATEGORY,这些类别必须全部出现在组建的类别列表中。比如INTENT中包含了两个类别LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。INTENT实例例1无参数ACTIVITY跳转INTENTITNEWINTENTACTIVITYMAINTHIS,ACTIVITY2CLASSSTARTACTIVITYIT例2向下一个ACTIVITY传递数据(使用BUNDLE和INTENTPUTEXTRAS)INTENTITNEWINTENTACTIVITYMAINTHIS,ACTIVITY2CLASSBUNDLEBUNDLENEWBUNDLEBUNDLEPUTSTRING“NAME“,“THISISFROMMAINACTIVITY“ITPUTEXTRASBUNDLE/ITPUTEXTRA“TEST”,“SHUJU”STARTACTIVITYIT/STARTACTIVITYFORRESULTIT,REQUEST_CODE对于数据的获取可以采用BUNDLEBUNDLEGETINTENTGETEXTRASSTRINGNAMEBUNDLEGETSTRING“NAME“例3向上一个ACTIVITY返回结果INTENTINTENTGETINTENTBUNDLEBUNDLE2NEWBUNDLEBUNDLE2PUTSTRING“NAME“,“THISISFROMSHOWMSG“INTENTPUTEXTRASBUNDLE2SETRESULTRESULT_OK,INTENT例4回调上一个ACTIVITY的结果处理函数(ONACTIVITYRESULT)OVERRIDEPROTECTEDVOIDONACTIVITYRESULTINTREQUESTCODE,INTRESULTCODE,INTENTDATA/TODOAUTOGENERATEDMETHODSTUBSUPERONACTIVITYRESULTREQUESTCODE,RESULTCODE,DATAIFREQUESTCODEREQUEST_CODEIFRESULTCODERESULT_CANCELEDSETTITLE“CANCLE“ELSEIFRESULTCODERESULT_OKSTRINGTEMPNULLBUNDLEBUNDLEDATAGETEXTRASIFBUNDLENULLTEMPBUNDLEGETSTRING“NAME“SETTITLETEMP3监听器监听器是个抽象类,它包含了一个事件触发时系统会去调用的函数。在子类中,根据项目的需要重写这个函数,派生后的监听器需要绑定到按钮上。一般的情况是这个按钮可能需要这个监听器,而另外一个按钮需要另外一个监听器,每个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器。各种控件,都有常用的事件,如点击按钮,拖动一个滚动条,切换一个LISTVIEW的选项等,绑定监听器的函数命名规则是SETONLISTENER。当用户(也可能系统)触发某个控件的某个事件后,往往要处理一些细节,但他们不具有通用性,例如可能点击按钮后改变它的值,也可能希望点击按钮后弹出一个网页,或者点击按钮后关闭当前ACTIVITY。正由于结果可能太多样,设计者索性将实现完全留给ANDROID开放者去实现,监听器其实是一种回调它不需要去执行ONLISTENER,而是系统触发后自动会去调用它。以使用自定义内部类继承监听器抽象类,并实现抽象方法,也可以使用JAVA提供的抽象类的匿名实现。监听器的实现方式有以下几种第一种,匿名内部类作为事件监听器类。大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。对于使用匿名内部类作为监听器的形式来说,唯一的缺点就是匿名内部类的语法有些不易掌握。第二种,内部类作为监听器。将事件监听器类定义成当前类的内部类。使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,所以可以自由访问外部类的所有界面组件。这是内部类的两个优势。第三种,ACTIVITY本身作为事件监听器。这种形式使用ACTIVITY本身作为监听器类,可以直接在ACTIVITY类中定义事件处理器方法,这种形式非常简洁。但这种做法的缺点就是可能造成程序结构混乱。ACTIVITY的主要职责应该是完成界面初始化,但此时还需包含事件处理器方法,从而会引起程序结构引起混乱。第四种,外部类作为监听器。使用外部类定义事件监听器类的形式比较少见,主要因为以下两个原因A事件监听器通常属于特定的GUI界面,定义成外部类不篮球提高程序的内聚性。B外部类形式的事件监听器不能自由访问创建GUI界面的类中的组件,编程不够简洁。但如果某个事件监听器确实需要被多个GUI界面所共享,而且主要是完成某种业务逻辑的实现,则可以考虑使用外部类的形式来定义事件监听器类。第五种直接绑定到标签ANDROID还有一种更简单的绑定事件监听器的的方式,直接在界面布局文件中为指定标签绑定事件处理方法。对于很多ANDROID标签而言,它们都支持如ONCLICK、ONLONGCLICK等属性,这种属性的属性值就是一个形如VIEWSOURCE的方法的方法名。3概要设计本章首先介绍了基于ANDROID的天气预报软件的可行性和需求分析,确立了开发基础,接着做了系统的流程设计,最后将软件的模块做了划分。31概述系统分析是在总体规划的指导下,对某个或若干个子系统进行探究,以此来确定新系统的各项功能。这一阶段主要是研究各部分之间的相互作用以及系统的界面和接口等,改善系统性能,从而达到最优的系统。311系统分析的原则1逻辑设计与物理设计分开的原则;2面向用户的原则;3结构化分析的原则;312系统分析的方法该系统采用抽象和分解的方法,根据实际调查研究,对系统进行自顶向下的逐层分解,逐步细分,逐步求精,让其尽可能的简单化、通俗化,便于设计者和浏览者的沟通与交流。本系统采用结构化设计的方法,其基本思想是“自顶向下,逐步求精“和“单入口单出口“,从而达到易于理解的目的。32系统可行性分析可行性研究的目的在于研究解决问题的必要性和可能性。可行性研究,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。为了避免盲目的软件开发,相关人员需要对开发特定软件项目的可行性进行研究,结合资金、技术和环境等各方面的制约条件,对该软件产品是否能够解决存在的问题,是否能够带来预期的效果和价值做出评估。系统的可行性分析主要包括经济可行性,技术可行性,操作可行性和法律可行性。1经济可行性目标系统开发经济需求的比较低,加上具有成熟的ANDROID平台以及十分普及的手机设备,所以在软硬件的支出上十分有限。而且,目标系统并不是十分的复杂,开发的周期较短,人员经济支出有限。最重要的一点是通过该系统的开发,可以使我们进一步理解软件开发流程,为从事软件开发工作打下良好的基础。从长远利益来考虑,系统满足经济可行性。2技术可行性本系统使用ANDROID技术进行开发,发展到现在,ANDROID已经算是一个较成熟的平台了,现在有越来越多的企业及技术人员选择它作为开发平台。ANDROID开发平台是由谷歌与开放手机联盟合作开发的一个开放、自由的移动终端平台,它由操作系统、中间件、应用软件三部分组成。该平台备有完善的程序开发环境,包括模拟器、除错工具、程序执行所耗用存储器、性能评介等功能。由于开发本系统的平台相当完善,再加上本人在实训基地进行过大量安卓项目实战,拥有较多开发此类项目的经验。因此,系统满足技术可行性。3操作可行性本系统用户只要有一台ANDROID手机,就可以使用了,系统的操作都是用户熟悉的选择框或者按钮。所有的操作通过手机就可以完成,用户不需培训,只要稍做提示即可。因此,系统满足操作可行性。4法律可行性由于本系统是在相关法律法规下实施完成的,所以不存在任何法律问题。系统满足法律可行性。综合考虑经济、技术、操作和法律等方面的因素,该天气预报软件的设计可以开始进行。33系统需求分析本天气预报软件实现了天气数据的获取和解析显示功能,具体来说,包括以下功能软件的功能框架图如图31所示实时天气信息查看用户可以查看指定城市的实时天气,包括温度、湿度、风力和穿衣指数等;未来三天预报用户可以查看到未来三天的天气情况;更换城市用户可以根据自己的实际情况选择自己想要查询的城市。图31系统功能框架图34性能需求分析为了保证软件能够长期、安全、稳定、可靠、高效地在ANDROID设备上运行,本系统应该满足以下原则。341实用性原则该软件充分利用手机的2G/3G网络,为本软件提供信息支持,在简洁实用的基础上对软件界面层级进行布局。342可扩展性与可维护性原则系统设计尽可能模块化、组件化。有一个较好的应用平台ANDROID设备,能容易地安装和卸载。343安全可靠性原则本软件是基于手机设备使用的,不会残留用户任何的隐私信息。344用户界面美观原则界面经过对用户心理的调研并参考时下流行的软件风格进行设计,加入了对用户具有诱导性的按键设计。345准确性原则本软件的核心技术是通过与互联网上提供的接口进行交互,保证了信息的准确性。346易用性原则本软件平易近人,不需要额外学习,每个界面都会有不同含义的图标进行提示下一步操作,保证用户使用时不会感到迷惑。35系统流程分析本系统的流程比较清晰,首先天气数据每更新一次,系统就会通过HTTP向指定的地址发出数据请求,若请求成功,则返回天气数据并通过JSON格式来解析数据,最终把解析到的数据显示在手机界面上。这样就完成了一次天气数据的更新,这一过程的流程图如图32所示图32系统流程图36项目模块划分由以上分析,可以将本系统划分为4个模块,它们分别是主界面模块、更换城市界面模块、网络接口模块和自动定位模块。主界面模块可以显示当前所选城市的实时天气信息、未来三天的天气信息以及穿衣指数;最上方有刷新按钮和更换城市按钮;最下方可以显示天气信息发布的时间和上次刷新天气信息的时间。更换城市界面模块主要分为三部分,上方是热门城市供用户选择,中间是全国所有城市及地区列表供用户选择,下方是“确定”和“取消”两个按钮。网络接口模块系统通过HTTP向指定的地址发出数据请求,若请求成功,则返回天气数据并通过JSON格式来解析数据并把解析到的数据显示在手机界面上。自动定位模块点击该按钮,可以通过GPS来确定用户当前所在的城市。4详细设计41设计目标本系统是设计目标是建立一个基于ANDROID平台的天预报软件,满足用户对最新天气信息的获取和查询操作。用户界面友好、操作简单,每一步骤的操作都经过精心的设计,将复杂的统计运算过程隐藏于简单的操作之下,系统的设计能降低使用前的培训、实施和使用中的维护时间。通过合理而先进的网络设计及软、硬件的优化选型,足可保证系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论