2.2 创建中国城市列表数据
根据天气预报系统功能需求分析,系统启动后,应在主界面上应呈现出中国国内所有城市的列表数据,因此需要创建中国城市列表数据,包括获取、解析城市列表数据,并在用户界面上呈现出来。其中重要的是手机终端从Web 服务器获取了所有类型的数据之后,如何将这些数据进一步交给Android 手机终端View组件[4],在手机界面上显示给用户。
(1)获取城市列表数据
由于Android没有提供Web Service的组件库,但可以通过修改在PC或J2ME上使用的开源Web ServiceJava库作为Android Web Service库使用。kSOAP2(http://ksoap2.sourceforge.net)就是一个在智能手机上的SOAP Web Service客户端包论文网,可用于资源受限制的Java环境如Applets或J2ME 应用程序。在Google Code上有一个项目ksoap2-android(http://code.google.com/p/ksoap2-android/)可用在Android平台上实现轻量级的SOAP库,即使用ksoap2-android的API来调用远端Web Service的服务。因此需要在CitiesWeatherForecast.java的onCreate()中进行数据获取的初始化工作,这可通过定义一个方法publicList<String> getAllCitiesNames()来获得中国城市名称列表。也就是说,采用它提供的获得全球各个国家城市的方法GetCitiesByCountry,通过http://www.webservicex.net/globalweather.asmx上的Web Service来提供天气预报服务。譬如,通过Constant.java中的public class Constant {},设置SOAP Action要调用的方法名、命名空间以及Web Service URL值。其源代码为:
public static final String SOAP_ACTION ="http://www.webserviceX.NET/GetCitiesByCountry";
public static final String METHOD_NAME ="GetCitiesByCountry";
public static final String SOAP_ACTION2 ="http://www.webserviceX.NET/GetWeather";
public static final String METHOD_NAME2 ="GetWeather";
public static final String NAMESPACE ="http://www.webserviceX.NET";
public static final String URL ="http://www.webservicex.net/globalweather.asmx";
然后在WebServiceCaller.java中实例化一个SoapSerializationEnvelope对象,设置 SoapObject的命名空间、方法名、参数等;并通过实例化一个AndroidHttpTransport对象来调用Web Service,并获得xml字符串数据。的代码段如下:
AndroidHttpTransport androidHttpTransport = newAndroidHttpTransport (Constant.URL);
try {
androidHttpTransport.call(soapAction,envelope);
Object result= envelope.getResponse();
xmlStr =result.toString();
}catch(Exception e) {
e.printStackTrace();
}
(2)解析数据列表
Android操作系统对xml字符串数据的操作功能很强,提供了dom、sax以及xmlpul3种方式,AndroidSDK 提供了android.sax包以方便SAXHandler的开发,可用来解析xml结果字符串。在本设计实例的CitiesWeatherForecast.java文件中,解析xml数据时,先通过RootElement root = new RootElement("NewDataSet")获得xml数据的根节点;然后再寻找其子节点直到找到City子节点,并设置一个监听器setEndTextElementListener()来获得City子节点的值;最后使用org.xml.sax的SAXParser来解析xml数据,把数据存入List<String>并返回:
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
xmlreader.setContentHandler(root.getContentHandler());
InputSource is = new InputSource(newStringBufferInputStream(xmlStr));
xmlreader.parse(is);
(3)在UI上呈现城市列表数据
当获得List<String>类型的数据之后论文网,就可以把它绑定到main.xml定义的ListView组件上,然后使用ListActivity呈现列表数据。在CitiesWeatherForecast.java中的代码段为:
List<String> cityList = getAllCitiesNames();
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,cityList));
即使用方法setListAdapter()把一个ListActivity填充进去。
2.3城市天气实况预报系统运行
城市天气实况预报系统的相关编码完成后对其测试运行结果如下。在Eclipse的Package Explorer窗口中右键选择CitiesWeatherForecast工程名,在弹出的窗口中选择“Run As”→“Android Application”安装该应用程序到Android模拟器并启动它。然后单击所要查询的城市名称列表项,稍等片刻便会显示出该城市的天气实况信息。也可以在文本框中直接输入所要查询的城市名称,单击“Search”同样会获得相应城市的天气预报信息。
3 结束语
Android 平台具有极大的开放性和兼容性,并且本身大量使用开源代码库,深为开发人员所喜爱。Android智能手机应用程序开发涉及它的整个体系结构,是一项非常复杂的工程。本文在介绍基于Android平台的应用程序设计原理的基础上,主要讨论提出了Android 用户界面设计、获取并解析列表数据的一种方法,给出了在用户界面上呈现数据的原理与设计过程;最后通过模拟器实现了应用程序的运行结果。当然, 基于Android 平台的开发技术还需要进一步完善, 需要在日后的工作中不断探索、研究, 以形成实用的城市天气实况预报系统。随着Google公司大力推广Android平台和Android智能手机的推出, 该系统会有很好的应用发展前景。
参考文献
[1]张波,高朝勤,杨选,等译.Burnette Ed. Android 基础教程[M].北京:人民邮电出版社,2009.
[2]张利国代闻龚海平编著.Android移动开发案例详解[M]. 北京:人民邮电出版社, 2010.
[3]刘平。Android 手机访问服务器的一种数据交互方法[J]. 电子设计工程. 2010 年9 月. Vol.18,No.9.
[4]王向辉,张国印,陈洁.Android 应用程序开发[M]. 北京:清华大学出版社,2010.
2/2 首页 上一页 1 2 |