




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录绪论11 课题总体介绍21.1 课题介绍21.2 课题目的及意义21.3 已了解的本课题国内外研究现状21.4 主要研究内容和功能22 J2ME开发环境的配置和J2ME框架42.1 JDK的安装42.2 Java基本开发环境JDK的配置52.3 安装Java开发平台Eclipse52.4 安装WTK52.5 在Eclipse上面配置SDK52.6 J2ME体系结构52.7 J2ME生命周期73 天气预报程序的设计93.1 设计准备93.2 设计思路93.3 程序架构114 天气预报软件的编写154.1 建立http连接154.2 使用KXML解析器164.3 程序界面编程194.4 使用记录集(RMS)234.5 J2ME中的按键命令响应26致谢28参考文献29基于J2ME平台的手机天气预报程序的设计与实现摘要随着移动通信业的突飞猛进,移动开发这个新鲜的字眼慢慢成为开发者关注的热点。最近一份在网上进行的调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足以说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。J2ME(Java 2 Micro Edition)是嵌入式/移动应用平台的王者,Linux和WinCE分列二、三位。Nokia等厂商力推的Symbian平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE系列在移动平台上会是与J2ME主要竞争对手。如果厂商能在标准实现上做得更加规范,则J2ME的跨平台特性会发挥得更加淋漓尽致。本文主要讨论了在J2ME平台下,如何开发一个具备连接网络、解析数据、存储城市功能的天气预报程序。论文首先介绍了J2ME平台的特点、历史,进而引出在此平台下开发一个天气预报软件的构想,并对其进行了可行性分析。接着进行了的系统设计,从多个方面分析了如何实现本程序的具体细节,如分别详细分析了网络连接、数据获取、数据解析、数据视图呈现、数据存储等模块实现方法。最后对系统进行了实现。系统的运行情况良好,完全达到了设计的要求。【关键词】J2ME 嵌入式开发 移动开发 嵌入式设备 天气预报 J2ME Platform Based Design and Realization of Weather Forecast Program on Mobile PhoneAbstractWith the rapid development of mobile communication, mobile developing has gradually become a hotspot concerned by developers. A recent online survey shows that there are 24.34 percent of respondents who engage in the investigation or development on embedded/mobile device. Although this figure might be slightly higher than actual that, it can enough prove that embedded/mobile device application is a captivating fresh cheese. J2ME (Java 2 Micro Edition) retains top spot on the embedded/mobile platform, while Linux is in second place, and WinCE No. 3. three persons. Developers occupation rate of Symbian platform developed and tried hard to recommend by Nokia has not reached the satisfactory level yet now. Considering that investigates one has amalgamated embedded apparatus (such as PDA) and mobile device (such as the intellectual mobile phone), we think that Symbian and WinCE will be two main sides of the competition in mobile platform. Moreover, if the manufacturer can do more normally in the standard realized, the platform-independent characteristics of J2ME will be brought into fuller play. In this paper, we discuss how to develop a J2ME platform based weather forecasts program which has network connections, parsing data and city information storage function. First, we introduce the characteristics and history of J2ME platform, and thus investigate the feasibility and architecture of the weather forecast program based on J2ME platform. Then the system design is presented, and we analyze the details on realizing the system from various aspects, such as network connectivity, data acquisition, data analysis, data view presentation and the data storage module, etc. At last, we realize the system, and the system performs very well and achieves the requirement of design. 【Keyword】J2ME; Mobile Development; Weather Forecast绪论J2ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE和J2EE共同组成Java技术的三个重要的分支。J2ME实际上是一系列规范的集合,由JCP组织制定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。比如MIDP2.0规范就是在JSR118中制定的。可能接触过J2ME的开发者会觉得说J2ME是一系列的规范不准确吧。因为我们在开发中用到了很多例如CLDC(Connected Limited Devices Configuration)和MIDP(Mobile Information Devices Profile)等内容。其实这并不矛盾,因为这些就是在相关规范中制定的。随着人们生活节奏的加快,越来越多的人开始关心天气,通过天气状况来决定或者计划最近的出行活动。以往传统获得天气资讯的方式是通过电视上的定时的天气预报或者收音机的实况天气报到来了解最及时的天气信息。但是这些传统的方式都会受到时间的限制,无法按照自己的时间来掌握天气预报。手机的普及率近几年也大大提高了,随着移动互联网的发展,越来越多人都可以通过使用手机的GPRS功能方便的上网,不过目前国内的手机上网费用过高,有流量限制,使得人们在用手机上网的同时也时时刻刻关心流量的耗费。基于以上两点,在目前跨平台性比较高的J2ME平台上开发天气预报软件,不仅能够随时获取实时天气预报,而且由于只接受天气数据,而不像有些wap网站提供的天气数据,需要打开整个wap网页才可浏览,这将大大节省手机获取天气信息时的数据流量,无论从实用角度还是经济角度都是一个很好的方案。1 课题总体介绍1.1 课题介绍基于J2ME的手机天气预报程序,利用手机便捷性的优势还有无限网络的方便,可以使用户无论在何时何地,都可以通过手机上网,实时的获得最新的天气信息。方便的城市管理系统,可以按自己的喜好设定多个城市,并且将城市设为默认,每次启动软件都将显示默认城市的天气预报。利用http连接,手机通过访问互联网,获得iGoogle主页提供的天气API接口来获取天气,使用j2me的xml解析功能,准确的解析出从服务器返回的天气数据文件,经过数据处理,以文字或者图表的形式来在手机终端上显示天气预报查询结果。同时利用j2me所提供的记录集功能,保存默认城市设置和自定义城市列表,方面用户自行管理多个城市。1.2 课题目的及意义随着近年来科学技术的迅猛发展,计算机技术已近慢慢的向微型化、便携化等方向发展。如今,人们对于嵌入式的研究的深入,诞生了各种基于多功能操作系统的手机,使得这些手机上可以安装各种各样的软件,实现功能和性能上的扩展和提高。目前大部分手机分为智能手机(SmartPhone)和非智能手机。智能手机包括以诺基亚和三星手机为代表的Symbian S60操作系统,以摩托罗拉为代表的Linux操作系统,以多普达、HTC(宏达)为代表的Windows Mobile操作系统,还有最近兴起的基于Google操作系统Android的新上市的手机。非智能手机包括诺基亚的S40平台、摩托罗拉早期的P2k平台等等。大部分非智能手机和所有的智能手机都可以运行J2ME软件。J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。正因为目前大部分手机都可以运行J2ME软件,能够自己开发一个基于J2ME的手机软件,实现“一次编译,到处运行”。能够有效的降低开发成本和提高开发效率。1.3 已了解的本课题国内外研究现状在国内,移动通信大佬中国移动公司在其旗下的WAP站点“移动梦网”上面专门设立了一个下载手机J2ME程序的下载中心,名字叫“百宝箱”。颇受手机用户的欢迎,产生了极大的反响。国内还有好多公司,例如股票软件公司大智慧、同花顺,都开发了基于J2ME的手机证券软件,实现了“手机炒股”。国内著名的IM(InstantMessaging即时通讯)公司深圳腾讯,在2004年的时候就已经将其最受欢迎的IM软件腾讯QQ移植到手机平台,使得广大的网友能够在一台支持J2ME和GPRS互联网通讯的手机上随时随地的与人沟通。在国外,J2ME主要用于开发手机上的各种基于本地或者网络通讯的软件或者游戏。具有代表性的是德国著名的手机游戏公司Gameloft,开发了成百个可以在上百种手机上运行的各种游戏,收效颇丰。1.4 主要研究内容和功能本课题所研究的是基于J2ME平台的天气预报软件。主要内容是能够在熟练使用Java编程语言、在Eclipse平台下面使用WTK 2.5.2(Wireless Toolkit Sun的无线开发工具包)的前提下面,开发出一个基于J2ME、网络通信、数据处理与存储等各种技术的一款能够预报未来3天以内的天气预报软件。本软件主要是充分利用J2ME开发手机程序和网络通信方面的优势,采用http连接方式从互联网上即时获取天气信息,以文字和图片的方式显示在手机屏幕上,优点是迅速,直观,方便,经济代价小。本课题的主要研究项目是研究J2ME的界面编程、网络通信编程、数据存储编程、数据处理编程,充分利用了Java语言的各种优势,包括多线程和图像显示技术,能够以较好的界面,迅速的反应速度和联网速度,较小的网络流量消耗来实现一款方便、实用、小巧的天气预报软件。2 J2ME开发环境的配置和J2ME框架2.1 JDK的安装首先本课题是Java程序的开发,就需要在电脑上首先搭建好Java开发平台,目前搭建Java的基本开发环境所需要的是JDK。JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。 JDK里面包括:SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的Java应用程序,从JDK 5.0开始,改名为Java ME。SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的Java应用程序,从JDK 5.0开始,改名为Java ME。JDK包含的基本组件包括:(1)Javac 编译器,将源程序转成字节码(2)jar 打包工具,将相关的类文件打包成一个文件(3)Javadoc 文档生成器,从源码注释中提取文档(4)jdb debugger,查错工具(5)Java 运行编译后的Java程序(.class后缀的)appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。Jconsole: Java进行系统调试和监控的工具。首先,我们需要从sun的官方网站下载JDK:http:/J/Javase/downloads/index.jsp点击Download JDK得到安装包,双击运行,一路next下来就安装完毕了。2.2 Java基本开发环境JDK的配置右击我的电脑-属性,点击“高级”选项卡,单击“环境变量”。 新建系统变量Java_HOME ClassPath和Path,具体是:变量名变量值Java_HOMEC:Program FilesJavajdk1.6.0_17ClassPath.;%Java_HOME%libdt.jar;%Java_HOME%libtools.jarPath;%Java_HOME%bin到这里,基本的JDK的配置就算完成了,然后可以进开始运行cmd,敲入Java和Javac,如果有相关的Java帮助信息就算配置成功了。2.3 安装Java开发平台Eclipse从Eclipse的官方网站/下载Pulsar开发平台Pulsar平台是Eclipse基金会为手机专门开发的J2me开发平台,基于Eclipse,在Eclipse的基础上增加了部分型号手机的在线SDK下载功能,整合了EclipseME插件,如果用标准版本的Eclipse开发手机J2ME程序则需要安装EclipseME插件才能进行正常开发。将Eclipse下载后解压到任意目录,运行Eclipse.exe就可以了。2.4 安装WTKWTK(SunJ2MEWirelessToolkit)Sun的无线开发工具包在SUN的官方网站http:/J/products/sjwtoolkit/download.html下载WTK2.5.2,按默认的设置安装就行了。2.5 在Eclipse上面配置SDK双击打开Eclipse,点击windowperformance点击左侧J2MEdevice management点击import,然后点击browse找到wtk安装目录,点击确定即可。最后在device management中选择默认的模拟器就行了。到这里,J2ME开发环境的搭建就算完成了2.6 J2ME体系结构J2ME 体系结构是基于设备的系列和类别的。一个类别定义了一个特定种类的设备:移动电话、简单寻呼机和电脑记事本都是单独的类别。对存储器和处理能力有相近需求的若干类别的设备构成设备的一个系列。移动电话、简单寻呼机和简单个人电脑记事本一起就是占用资源很小的设备的一个系列。图2.1 J2ME环境架构为了支持资源受限设备系列所要求的那种灵活性和可定制部署,人们将 J2ME 体系结构设计成模块化的和可伸缩的。J2ME 技术在一个完整的应用程序运行时模型中定义了这种模块性和可伸缩性,在该模型中的四个软件层都构建在设备的主机操作系统上。图2.2 J2ME体系结构Java 虚拟机层(Java Virtual Machine Layer):这一层是 Java 虚拟机的一个实现,它是为特定设备的主机操作系统定制的,而且支持一个特定的 J2ME 配置(configuration)。配置层(Configuration Layer):配置层定义了 Java 虚拟机功能的和特定类别设备上可用的 Java 类库的最小集。从某种程度上说,一个配置定义了 Java 平台功能部件和库的共同性,开发者可以假设这些功能部件和库在属于某一特定类别的所有设备上都是可用的。用户不太会见到这一层,但它对框架(profile)实现者非常重要。框架层(Profile Layer):框架层定义了特定系列设备上可用的应用程序编程接口(API)的最小集。框架在一个特定的配置上面实现。应用程序是针对特定的框架编写的,因此可以移植到支持该框架的任何设备上。一个设备可以支持多个框架。用户和应用程序供应商看到最多的就是这一层。MIDP 层:移动信息设备框架(Mobile Information Device Profile(MIDP)是一个 Java API 集合,它处理诸如用户界面、持久存储和联网这样的问题。Java 虚拟机层(Java Virtual Machine Layer)、配置层(Configuration Layer)和框架层(Profile Layer)一起构成了连接限制设备配置(Connected Limited Device Configuration(CLDC)。MID 框架(MID Profile)和 CLDC 提供了一个标准的运行时环境,这个环境允许把新的应用程序和服务动态地部署在终端用户设备上。用 MIDP API 进行 J2ME 编程:构件CLDC 和 MIDP 组合起来为创建移动电话和简单双向寻呼机上的应用程序提供了完整的环境。MID 框架的核心是一个 MIDlet 应用程序。这个应用程序继承了 MIDlet 类,以允许应用程序管理软件对 MIDlet 进行控制、从应用程序描述符检索属性以及对状态变化进行通知和请求。所有 MIDlet 都继承 MIDlet 类 运行时环境(应用程序管理器)和 MIDlet 应用程序代码之间的接口。MIDlet 类提供了用于调用、暂停、重新启动和终止 MIDlet 应用程序的 API。应用程序管理软件可以在运行时环境内管理多个 MIDlet 的活动。此外,MIDlet 可以自己发起一些状态变化,并把这些变化通知给应用程序管理软件。MIDP API 类的完整集合可以分为两个类别:用于用户界面的 MIDP API:设计这些 API 是为了能以一系列屏幕显示为基础与用户进行交互操作,每一屏幕显示把适量的数据显示给用户。命令以每屏幕为基础提供给用户。这些 API 允许应用程序决定下一屏显示什么、执行什么计算和使用网络服务的何种请求。用于处理数据库的 MIDP API:这些 API 负责组织和操作设备数据库,这个数据库由在 MIDlet 的多个调用之间跨越时保持持久的信息组成。底层的 CLDC API 用于处理字符串、对象和整数。还提供了 Java 2 API 的一个子集,用于处理 I/O 和网络通信。如图 2.3 所示,显示了 J2ME的构件。 图2.3 J2ME构件2.7 J2ME生命周期当我们新建一个MIDlet项目和源文件的时候,大概的基本框架如下:public class a extends MIDletpublic a()protected void destroyApp(boolean unconditional)throws MIDletStateChangeException/ TODO Auto-generated method stubprotected void pauseApp()protected void startApp() throws MIDletStateChangeException每一个J2ME的MIDlet程序都需要一个主类,就是MIDlet类,继承超类MIDlet,这个类相当于主程序所整个流程开始的类,里面有3个需要重写的方法:destroyApp、pauseApp、startApp。startApp是当J2ME程序开始的时候所执行的入口方法当程序开始运行的时候,在MIDlet主类的构造方法调用之后就会立即运行这个方法,需要说明的是,MIDlet构造函数在整个程序的生命周期里面都只执行一次,而startApp则不是。startApp方法当从外部接受到暂停的指令的时候,会暂时跳出,当外部恢复的时候,程序会再次执行startApp。pauseApp是当程序通过外部命令暂停的时候,比如支持J2ME的手机按退出键的时候,会选择关闭程序或者暂停程序,当选择了暂停程序,程序会立即跳到pauseApp,这个时候,我们可以在pauseApp方法中释放一些资源,节省手机的内存空间,而且还要把程序必要的数据保存下载,当再次恢复进入startApp方法的时候,就需要读取之前保存的必要数据来恢复现场。destroyApp是当程序正常退出的时候,比如通过程序的退出菜单、执行了退出命令的时候降被调用。在destroyApp方法中我们可以释放所有的资源,关闭所有的连接(包括文件和网络连接),保存数据到数据集等等。这样可以使程序正常的退出并且保存必要的内存数据机的Flash存储器中。3 天气预报程序的设计3.1 设计准备首先,当我萌生一个开发手机上的天气预报软件的想法的时候,我首要考虑到的问题是跨平台,因为目前来看,手机的操作系统五花八门,在不同的手机上需要采用不同的编程语言才能实现。这是一个麻烦的问题,因为在特定的手机平台上开发应用程序,需要对这个手机平台有比较深入的了解,了解编程语言、特定的库等等。作为一个开发者,当然希望自己所编写的程序能够在更多的手机上运行,但是因为个人的能力有限,不可能为不同的平台的手机都开发或者移植这样一个天气预报程序,这是个经济和效率的问题。所以我最后选择了J2ME平台。J2ME平台有着良好的跨平台性,这也正是Java语言的优点,SUN公司(已被Oracle收购)当时开发J2ME语言以及平台的时候,充分考虑到了跨平台的因素,保证在不同手机平台上开发的J2ME程序,都能够使用统一的标准的库,即使在不同手机平台上有着不同的Java虚拟机,但是执行相同的J2ME程序,结果都是一样的。3.2 设计思路接下来就需要思考如何实现这么一个天气预报软件。天气预报是大部分人都很关心的一个话题,渗透到生活的方方面面。人们能够通过手机来方便的查询当前城市的天气状况,的确是很方便的。天气预报主要需要考虑以下的几个方面:(1)网络连接(2)天气数据的获取(3)解析获取到的数据(4)显示到手机屏幕(5)城市管理(实现多个城市的查询)整个程序需要完全实现以上所列出的功能,使这些功能之间很好的相互配合,才能最终完成整个软件的设计。接下来对每个方面详细说明一下。3.2.1 网络连接:要能够实时的通过手机获取天气预报的信息,目前能够采取的唯一途径就是网络连接。现在手机上网已经是一个很普片的现象,充分利用手机方便的上网功能,是实现手机上的天气预报程序的关键。这个就需要使得手机通过J2ME来与服务器(提供天气预报数据)建立一个网络连接,然后彼此互相传送数据才能够进行信息的交换。信息交换包括发送和接受,发送是指手机端需要发送查询信息(请求)给服务器,服务器收到手机端发送的信息才能知道用户需要查询什么信息,包括查询天气的城市和时间等内容。3.2.2 天气数据的获取:手机上的天气预报程序,最主要的数据处理就是能够通过与服务器之间的网络连接,在与服务器进行数据交换的时候能够正确的从服务器获取相关的天气预报的信息,这个问题是一个比较棘手的。因为手机平台的各种方面的限制,目前并不能确定J2ME平台能够接受和处理什么样的数据,而且天气数据的来源也是一个待解决的问题。好在最后发现了一个很方便而且可靠的数据来源Google API。Google公司的API给很多开发者带来了方便,包括地图、天气、搜索等都有相应的API提供给开发者,我们有理由相信Google公司所提供的API的可靠性和数据的真实性。所以最后决定用Google所提供的天气预报的API。分析Google的天气API得之是通过post一个http请求给Google所提供的API URL,然后Google服务器会返回一个文本,分析知此文本是一个标准的xml文件。里面已经包括了所有可以使用的天气数据。接下来的工作只需要解析这个xml文件就可以获得自己想要的天气字符串。3.2.3 解析获取到的数据:目前需要在手机的J2ME平台找到一个合适的方法来解析从Google服务器获得的天气xml文档。查阅了相关的资料,J2ME的库中没有相关的xml解析的库。后来自己试着通过字符串的一些函数来解析xml中间的字符串,不过发现效果很不好,有一些编码的问题存在,而且自己解析字符串存在着一些漏洞,无法考虑到所有的xml文件中的字符串的情况。于是决定采用第三方的、适合J2ME平台的xml解析器。通过查询资料,发现kxml这个解析器是一个轻量级的解析器,这个很适合J2ME这种受到硬件限制的设备,内存不能占用太高,库不能太复杂,运行效率也需要考虑。查询的资料显示kxml可以运用在applet中,但是还没有运用在J2ME中的有关资料,不过鉴于Java的跨平台性,我想把kxml运用在J2ME平台上也不是问题。最终,只运用了kxml库中的几个方法便解析出了需要的数据,而且没有任何兼容性的问题,这再一次验证了Java跨平台的强大。3.2.4 显示到手机屏幕:手机屏幕有个特点,分辨率不高,而且不同手机型号的分辨率大不相同,要在不同手机上实现分辨率的自适应是一个很头疼的问题。分辨率的不同主要影响的是图片资源的显示问题。相同的图片在不同的手机分辨率上所显示的效果截然不同。所以如果为不同分辨率的手机制作分辨率不同的图片,这样会照成在同一个手机上不需要用到的图片的资源的浪费。所以最后采取了折中的办法。为了解决这个问题,需要编写两个不同的程序,一个程序是无关手机分辨率的,所谓无关手机分辨率,是指在不同分辨率手机上都可以正常使用,上面也提到了,手机分辨率的不同最大的影响是图片资源的显示,那么我索性编一个不是通过图片来展现天气查询结果的程序,以适应不同分辨率手机的需要。而另外一个程序,是为了能够在大多数手机上运行,采用大多数手机分辨率都能够显示的图片资源。目前来看,大多数手机所使用的分辨率是QVGA级别的(240*320),所以只需要按照这个分辨率来准备特定的图片资源,就可以在所有QVGA屏幕的分辨率上以图片显示的方法展现天气预报查询的结果。3.2.5 城市管理(实现多个城市的查询):一个天气预报程序,亟待需要的是一个城市管理的功能,这个很容易理解。因为不同地区的用户,需要查询不同地区的天气预报,这个需要能有一个城市的设置功能,但是往往设置或者查询一个城市是远远不够的,还需要考虑那种在外地或者经常在多个城市之间奔波的用户,这些用户需要能够存储多个自己设定的程序并且查询这些设定好的城市的天气。城市管理界面的功能就是为了满足以上需求。需要的功能是能够对城市进行添加、删除等操作。这个操作就需要使用J2ME的持久性存储功能来对城市信息进行存储。3.3 程序架构1.逻辑流程图:程序开始从记录集读取默认城市和自定义城市列表建立默认城市记录集连接网络获取天气xml数据解析数据显示天气YN存在默认城市图3.1 程序逻辑流图2. 类框图:MIDletJWeatherCanvasCity ListWeather Canvas图3.2 程序类框图程序主要分为三个类:Jweather 主类、CityList城市列表类、Weather Canvas图形画布类。图3.3 类分层结构现在分别详细说明一下各个类的功能。(1)Jweather类继承MIDlet类,MIDlet类是J2ME的主类,即程序的入口类。任何J2ME程序都是以这个类为程序执行的开始点,程序的基本初始化、基本成员变量和方法都可以在这个类中定义。继承MIDlet类的主类需要重写其中必要的三个方法,分别是startApp、pauseApp和destoryApp。这三个类在J2ME的生命周期中也提到过,startApp是J2ME程序的入口方法,pauseApp是当程序通过外部消息暂停的情况下所执行的方法,例如在真实的手机上运行程序的时候,如果这时有电话打进手机,程序会被迫中止,这时pauseApp将被执行。destroyApp是当程序通过正常的J2ME方法退出J2ME程序的时候将执行的方法,可以在这个方法中释放程序需要用到的资源。图3.4 JWeather类结构JWeather类实现CommandListener来处理基本的键盘响应。图3.5 JWeather类字段摘要JWeather类中有4个字符串数组,用于存储解析之后的天气数据。图3.6 JWeather类方法摘要在JWeather类中需要用到一些必要的方法,这些方法使用在连接网络、获取数据、解析数据等各个方面。Bytes2int方法是用于在记录集中读取数据的时候,将bytes数组转换为整数。因为记录集只能存储bytes数组类型,任何数据在记录集中存储的时候都需要将它转换为bytes数组类型,而当从记录集中读取数据的时候则需要使用相应的方法将bytes数组类型转化为需要使用的类型。closeAll方法是用于当程序结束的时候,关闭所有打开的网络连接、记录集等。commandAction方法是当JWeather类使用了CommandListener接口后需要重写的方法,所有对于命令和键盘响应的处理全部在这个方法中执行。LinkWeather是一个专门用来连接网络获取数据的方法,因为可能会多次用到,而且为了程序的结构清晰和方便,将网络连接部分单独独立出来。reList是从记录集中读取城市列表的时候重新刷新List容器的方法。searchCity和searchCityPY都是在查询城市的时候,城市拼音和城市中文相互转化的方法,因为List容器是现实城市中文列表供用户选择,但是连接网络获取天气的API则需要城市的拼音。ShowWeather方法用来解析获取的xml文档并且通知WeatherCanvas类显示出查询的天气结果。(2)WeatherCanvas类继承Canvas类,Canvas是J2ME中专门用来显示的画布类,利用这个类可以方便的在手机屏幕上绘制各种各样的图形以使程序显示内容更加的直观。WeatherCanvas类继承Canvas类后可以重写Paint方法,这个方法就是用来绘制图形的函数。图3.7 WeatherCanvas类结构WeatherCanvas类通过实现Runnable接口实现多线程,因为显示天气的界面需要在选取不同城市后立即刷新显示,或者显示获取天气的等待界面,这些都需要使用多线程让这个界面类一直在后台运行,待程序需要显示结果的时候则切换到这个Displayable。(3)CityList类用于城市管理的类,处理多个城市的数据,存储城市到记录集,从记录集中读取城市的信息等。图3.8 CityList类结构图3.9 CityList类方法摘要ByteArray2Object方法用于将byte数组转化为对象,从记录集中读取城市列表需要用到此方法。getCityName和getCityNamepy是将记录集中的城市列表读取到内存中以备调用的方法。Object2ByteArray方法用于将对象实例转化为byte数组,将城市列表存储到记录集中需要用到此方法。setCityName和setCityNamepy是修改此类的成员变量的方法。4 天气预报软件的编写4.1 建立http连接下面是HttpConnection的继承关系图:图4.1 Connection继承关系图代码片段private HttpConnection hc = null;postUrl=/ig/api?hl=zh_cn&weather=+city;tryhc = (HttpConnection) Connector.open(postUrl);catch (Exception ex)程序采用J2ME中的Connector包中的Connector.open()静态方法,为httpconnection对象指向一个url来建立http连接并且打开。天气预报的原理是通过连接Google的天气服务器所提供的API接口/ig/api?hl=zh_cn&weather=后面再加上城市的拼音来建立一个http连接,连接建立之后就可以与Google服务器通讯。当我们使用软件查询天气的时候,会首先选择好城市,然后软件会把城市对应的拼音通过此url来建立http连接,从而服务器会返回带有响应城市的天气信息的数据。4.2 使用KXML解析器当建立好http连接之后,服务器会返回一个xml文件,里面包含对应城市的天气信息,我们需要从这个xml文件中解析出响应的天气数据的字符串。这里我用到了J2ME第三方xml解析器kxml。KXML是一个很小的XML解析器,专为在一些有特别限制的环境中使用,如Applets、MIDP等方面KXML是一个Enhydra维护的项目,支持下面的性能:(1)支持XML名称空间(2)用松散模式分析HTML或其它SGML格式(3)占用很少的存储空间(21 kbps)(4)基于Pull的分析(5)支持XML写操作(6)可选的DOM支持(7)可选的WAP支持kXML历史版本(1)1999-12-25发布名为XP的SAX解析器(2)2000-07-25开始发布kXML 1(3)2003-09-01开始发布kXML 2目前最新的是2006-06-23发布的 kXML 2 release 2.3.0版本。kXML 1与kXML 2的对比kXML 1是一个简单的pull语法解析器,基于事件对象。相对于 kXML 1 , kXML 2是基于XMLpull API ,可以减少性能开销和创建的对象数量,kXML 2采用BSD协议。kXML重要特点kXML在特别限制的环境的开发中具有以下两个重要特点:(1)支持WBXML (WAP Binary XML) :允许解析WAP或Wireless Village协议的内容;(2)采用“放松”模式解析HTML或SGML(Standard Generalized Markup Language,标准通用标记语言)格式文件,以避免在手机上需要两个单独的解析器。kXML简单例子KXML支持DOM语法分析和操作,但是不支持push语法分析。取而代之,它使用一种稍微不同的称为Pull的分析方法。 text1 text2 解析代码如下:parser.nextTag(); parser.require(XmlPullParser.START_TAG, null, elements); while(parser.nextTag() = XmlPullParser.START_TAG) parser.require(XmlPullParser.START_TAG, null, text); / handle element content System.out.println(text content: + parser.nextText(); parser.require(XmlPullParser.END_TAG, null, text); parser.require(XmlPullParser.END_TAG, null, elements); 下载官方下载地址:/project/showfiles.php?group_id=9157&package_id=58653参考资料官方网站地址:/API文档地址:/kxml2/Javadoc/xmlpull:/我使用kxml来解析天气预报数据的xml文件。首先是用计算机的浏览器直接访问该http地址而返回来的xml源文件:图4.2 xml文件结构程序需要将里面的forecast_conditions标签中的day_of_week,low,hight ,condition中的data属性值解析出来,然后单独存放到一个字符串数组中,供程序其他部分使用和输出到屏幕。使用kxml解析天气数据xml文件的代码片段如下:图4.3 解析xml首先定义一个DataInputStream输入流dis,dis用于接收httpconnection传回的字符串,然后使用kxml解析器中的parser.setinput方法来获得xml中的数据,传入一个inputstreamreader类。使用parser.next()方法来寻找下一个xml标记。Parser.require用于设定查找标记的开始标签,这里我先找到xml_api_reply标签,然后通过循环来找到xml_api_reply的结束标签,这样就可以跳过xml文件开始部分我不需要的标签字段,parser就相当于指向xml中内容的指针一样,我们可以控制parser来读取xml中的字段。实现xml解析的代码片段如下:图4.4 解析xml字段然后通过查找之前设定的字段的结束标志,这时parser已经进入了forecast_condition标签中,然后通过parser.getname().equals()来查找day_of_week,low,high,condition子标签,然后当paraser指向了day_of_week标签的时候,使用getAttributeValue(0).getBytes(),方法来获得第1个属性的字节数组,接着通过String的构造函数生成一个编码为gb2312的字符串,最后保存到天字符串中方便以后调用。4.3 程序界面编程程序需要3个界面:天气显示界面:通过文本或者图像的方式,将由kxml解析器所解析出的天气数据字符串显示出来。这里用到了J2ME的几个容器。Form容器:表单容器,可以显示图像,文本,文本框和按钮。Canv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 团购房源协议为无效合同
- 堆场场地工程合同协议书
- 头疗加盟合同协议书范本
- 夫妻财产协议赠与协议书
- 家用电器保修服务协议
- 化工厂合作生产合同范本
- 疫情期间的演出合同范本
- 交行与万科签订协议合同
- 合同纠纷仲裁协议书范本
- 充电桩保养安装合同协议
- 调相机工程施工质量验收规程-第4部分-仪表与控制系统
- 四渡赤水(课件)
- 2024年浙江绍兴杭绍临空示范区开发集团有限公司招聘笔试真题
- 部编版五年级语文上册各单元作文范文
- 贵州省贵阳市(2024年-2025年小学五年级语文)统编版小升初真题(上学期)试卷及答案
- 2024-2025学年青岛版七年级数学上册第一次单元过关检测 (前两章)
- 苏少版七年级上册综合实践活动教案
- 院前急救技能竞赛(驾驶员)理论考试题库大全-上(选择题)
- 锁骨骨折的护理查房
- 部编人教版六年级上册语文全册教学课件+单元复习课件
- 《消费心理学》课程教学大纲
评论
0/150
提交评论