android天气预报系统设计Word下载.docx
《android天气预报系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《android天气预报系统设计Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
当startActivity方法被调用时将触发解析myIntent的动作。
这个机制具有两点优势:
一是能够重复利用从其他组件中以Intent形式产生的一个请求;
二是Activity可以在任何时候被一个具有相同IntentFilter的新Activity取代。
1.2IntentReceiver
通过IntentReceiver实现的应用能够对一个外部的事件作出响应。
IntentReceiver在AndroidManifest.xml中注册,也可以在代码中使用Context.registerReceiver()进行注册。
当一个IntentReceiver被触发时,应用不必对请求调用IntentReceiver,系统会在需要的时候启动应用。
各种应用还可以通过使用Context.
brOAdcastIntent()将它们自己的IntentReceiver广播给其他应用程序。
1.3Service
Service是一段长生命周期的、没有用户界面的程序。
例如媒体播放器这个Activity会使用Context.startService()来启动一个Service,从而可以在后台播放音乐。
同时,系统也将保持这个Service一直执行,直到Service运行结束。
系统可通过使用Context.bindService()方法,连接到一个Service上(如果这个Service还没有运行将启动它)。
当连接到一个Service之后,还可以利用Service提供的接口与它通信。
就媒体播放器来说,还可以进行暂停、重播等操作。
1.4ContentProvider
Android应用程序能够将它们的数据保存到文件、SQL数据库,甚至是任何有效的设备中。
ContentProvider实现了应用数据与其他的应用程序的共享。
ContentProvider类实现一组标准的方法,能够让其他应用程序保存或读取此ContentProvider处理的各种类型数据。
在Android中,默认使用SQLite作为系统数据库,但使用方法略有不同。
Android中每一个应用程序都运行在各自的进程中,当访问其他应用程序的数据时,需要在不同的虚拟机之间传递数据,这样操作起来会有些困难(正常情况下,不能读取其他应用程序的数据库文件)。
ContentProvider正是解决不同的应用包共享数据的工具。
2天气实况预报系统的具体实现
基于Android平台的智能手机访问服务器的主要技术是数据交互方法。
基于Android操作系统的天气实况预报系统设计的核心是通过调用通信协议SOAP(SimpleObjectAccessProtocol)的接口,从WebService提供商中提取天气预报的数据信息,为客户端服务。
其基本功能是当用户运行天气预报系统程序时,在手机屏幕上显示出中国的城市名称,用户单击任意一个城市名,可获得该城市的天气实况预报信息。
用户也可以输入城市名称,点击查询获得天气预报信息。
CitiesWeather-Forecast工程目录结构及其源代码文件如图1所示。
2.1Android平台的用户界面实现
Android提供的可变化的用户界面(UI)开发模块是基于XML文件的。
这些XML文件放在工程/res/layout下面。
这个目录可包含所有应用程序所需的非码部分,比如图片、字符串、xml文件。
当要使用到这些资源时,在代码目录中打开R.java文件即可。
在XML文件里编辑界面的代码,实现起来不仅方便,使用时也会更加灵活。
在Android程序设计中要用到一些基本的AndroidUI元素,通过使用Views、ViewGroups和layouts可为Activity创建功能性的、富有直观力的UI.通常是使用AndroidSDK中提供的一些控件,进行布局、扩展和定制这些控件,并使用ViewGroups去组合Views,创建由相互作用的子控件组成的原子的、重复利用的UI元素。
也可以创建自己的Views,来实现显示数据和与用户交互的新途径;
或使用一些继承自ViewGroup的Layout管理器来组织AndroidUI中的单个元素到屏幕上。
在一个Android应用中,用户界面由View和ViewGroup对象构建。
View与ViewGroup有很多种类,而它们都是View类的子类。
View对象是Android平台中用户界面的基本单元。
View类是widgets(工具)类的父类,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。
ViewGroup类是Layouts(布局)类的父类,它们提供了诸如流式布局、表格布局以及相对布局之类的布局架构。
View对象是一个数据体,它的属性存储了用于屏幕上一块矩形区域的布局参数及内容。
并负责它所辖的这个矩形区域之中所有测量、布局、焦点转换、卷动以及按键/触摸手势的处理。
作为一个用户界面对象,View同时也担任着用户交互关键点以及交互事件接受者的角色。
天气实况预报系统程序功能比较单一,其UI也相对比较简单,只要有一个输入框、一个查询按钮以及一个显示所有中国城市信息的列表即可。
为了建立Android平台的用户界面,首先要在PackageExplorer窗口中展开Layout后新建。
xml文件,用来对窗口界面进行布局,主要有系统运行的主配置文件main.xml和result.xml.
Layout是一类特殊的ViewGroup控件,它们本身没有任何可显示内容,存在的惟一原因就是其中的内部结构,能够更好地摆放它的子控件。
比如Linearlayout,可将子控件按水平或垂直方向按顺序排列下去;
Tablelayout,可以将子控件按照表格的形式,一枚枚放置好;
Relativelayout更灵活,可以设定各个控件之间的对齐和排列关系,适合定制复杂的界面。
有了Layout的存在,控件和控件之间不再是割裂地存在,而是更有机地结合在一起,设定起来也更为方便。
在本实例的main.xml文件中主要是添加一些界面的布局设置,例如如下代码:
<
linearlayout<
p="
"
>
/linearlayout<
android:
orientation=“horizontal”
layout_width=“fill_parent”
layout_height=“wrap_content”
>
layout_width=“wrap_content”
text=“@string/cityText”/>
text=“@string/searchBtn”/>
上述代码生成了一个Linearlayout,定义了一个EditText和Button,并且设置了相关的参数。
在Android中,控件最重要的大小属性是width/height,开发者可以指明控件的大小,控件的宽、高以及在屏幕中的显示位置等,可以设定成为fill_parent和wrap_content.另外,还可以设置相应的文本信息,并可通过android:
进行引用(string文件存放在工程的res/values中)。
按照这种方法,还可以依据需要定义相应的布局控件,譬如定义用来呈现天气实况信息的UI等。
2.2创建中国城市列表数据
根据天气预报系统功能需求分析,系统启动后,应在主界面上呈现出中国国内所有城市的列表数据,因此需要创建中国城市列表数据,包括获取、解析城市列表数据,并在用户界面上呈现出来。
为此,需要解决的问题是手机终端从Web服务器获取了所有类型的数据之后,将这些数据进一步交给Android手机终端View组件[4],在手机界面上显示给用户。
⑴获取城市列表数据
Android没有提供WebService的组件库,但可以通过修改在PC或J2ME上使用的开源WebServiceJava库作为AndroidWebServic库使用。
kSOAP2()是一个在智能手机上的SOAPWebService客户端包,可用于资源受限制的Java环境如Applets或J2ME应用程序。
在GoogleCode上有一个项目ksoap2-android(平台上实现轻量级的SOAP库,即使用ksoap2-android的API来调用远端WebService的服务。
因此需要在CitiesWeatherForecast.java的onCreate()中进行数据获取的初始化工作。
通过定义一个方法publicListgetAllCitiesNAMEs()可获得中国城市名称列表。
也就是说,采用它提供的获得全球各个国家城市的方法GetCitiesByCountry,通过上的WebService可提供天气预报服务。
譬如,通过Constant.java中的publicclassConstant{},设置SOAPAction要调用的方法名、命名空间以及WebServiceURL值,其源代码为:
publicstaticfinalStringSOAP_ACTION=
“http:
//www.webserviceX.NET/GetCitiesByCountry”;
publicstaticfinalStringMETHOD_NAME=
“GetCitiesByCountry”;
publicstaticfinalStringSOAP_ACTION2=
//www.webserviceX.NET/GetWeather”;
publicstaticfinalStringMETHOD_NAME2=“GetWeather”;
publicstaticfinalStringNAMESPACE=
//www.webserviceX.NET”;
publicstaticfinalStringURL=
然后在WebServiceCaller.java中实例化一个SoapSerializationEnvelope对象,设置SoapObject的命名空间、方法名、参数等;
并通过实例化一个AndroidHttpTransport对象来调用WebService,并获得xml字符串数据,其代码段如下:
AndroidHttpTransportandroidHttpTransport=
newAndroidHttpTransport(Constant.URL);
try{
androidHttpTransport.call(soapAction,envelope);
Objectresult=envelope.getResponse();
xmlStr=result.toString();
}catch(Exceptione){
e.printStackTrace();
}
⑵解析数据列表
Android操作系统对xml字符串数据的操作功能很强,提供了dom、sax以及xmlpul3种方式。
AndroidSDK提供了android.sax包以方便SAXHandler的开发,可用来解析xml结果字符串。
在本设计实例的CitiesWeatherForecast.java文件中,解析xml数据时,先通过RootElementroot=newRootElement(“NewDataSet”)获得xml数据的根节点;
然后再寻找其子节点直到找到City子节点,并设置一个监听器setEndTextElementListener()来获得City子节点的值;
最后使用org.xml.sax的SAXParser来解析xml数据,把数据存入List并返回:
SAXParserFactoryfactory=SAXParserFactory.newInstance();
SAXParserparser=factory.newSAXParser();
XMLReaderxmlreader=parser.getXMLReader();
xmlreader.setContentHandler(root.getContentHandler());
InputSourceis=newInputSource
(newStringBufferInputStream(xmlStr));
xmlreader.parse(is);
⑶在UI上呈现城市列表数据
当获得List类型的数据之后,就可以把它绑定到main.xml定义的ListView组件上,然后使用ListActivity呈现列表数据。
在CitiesWeatherForecast.java中的代码段为:
ListcityList=getAllCitiesNames();
setListAdapter(newArrayAdapter(this,
android.R.layout.simple_list_item_1,cityList));
即使用方法setListAdapter()把一个ListActivity填充进去。
2.3城市天气实况预报系统的调试
城市天气实况预报系统的测试结果如下。
在Eclipse的PackageExplorer窗口中用鼠标右键选择CitiesWeatherForecast工程名,在弹出的窗口中选择“RunAs”→“AndroidApplication”安装该应用程序到Android模拟器并启动它。
然后单击所要查询的城市名称列表项,稍等片刻便会显示出该城市的天气实况信息。
也可以在文本框中直接输入所要查询的城市名称,单击“Search”同样会获得相应城市的天气预报信息。
3结束语
Android平台具有极大的开放性和兼容性,并且本身大量使用了开源代码库,深为开发人员所喜爱。
Android智能手机应用程序的开发涉及了它的整个体系结构,是一项非常复杂的工程。
本文在介绍基于Android平台的应用程序设计原理的基础上,提出了Android用户界面设计、获取并解析城市列表数据的一种方法,给出了在用户界面上呈现数据的原理与设计过程,最后通过模拟器进行了应用程序的调试。
当然,基于Android平台的开发技术还需要进一步完善,需要在日后的工作中不断探索、研究,以建立实用的城市天气实况预报系统。