您的位置 首页 电路

根据Android智能手机天气预报体系规划及完成

为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端,让手机能通过移动网和互联网访问Web 网站并处理各项业务。

0 导言

为了让智能手机用户能够随时随地查询互联网所供给的服务,一种高效的办法便是将运用体系的功用拓宽到手机终端,让手机能经过移动网和互联网拜访Web 网站并处理各项事务。Android 体系是Google 公司开发的一个开源手机操作体系,它包含了操作体系、用户界面和运用程序,即智能手机作业所需的悉数软件。Android 的最大特点是它的开放性体系架构,不只具有非常好的开发、调试环境,而且还具有各种可扩展的设备,包含丰厚的图形组件、多媒体支撑功用和强壮的浏览器,而且已有许多比较老练的运用事例。

本文提出了智能手机气候实况预告体系的一种规划完成办法,供开发者参阅。

1 Android运用程序规划原理

一个Android 运用程序,一般由AcTIvity、Intent Receiver、Service、CONtent Provider 四种功用组件构成。可是,并不是每一个Android 运用程序都需求用到这四种功用组件,而是只需上述四种功用组件的某些组合。

1.1 Activity

Activity 是最根本的Android 运用程序组件。大多数运用由多个屏幕组成,一个Activity 一般则是一个独自的屏幕。每一个Activity 都被完成为一个独立的类,而且从Activity 基类中承继而来。Activity 类将会显现由视图控件组成的用户接口,并对事情做出呼应。Android 运用Intent 这个特别类,完成在屏幕与屏幕之间移动。经过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,Activity 将会调用STartActivity(Intent myIntent)办法,然后,体系会在一切装置的运用程序中所界说的IntentFilter 中查找,找到最匹配myIntent的和Intent 对应的Activity.新的Activity 接收到myIntent 的告诉后,开端运转。当startActivity 办法被调用时将触发解析myIntent 的动作。这个机制具有两点优势:一是能够重复运用从其他组件中以Intent 办法发生的一个恳求;二是Activity 能够在任何时分被一个具有相同IntentFilter 的新Activity 替代。

1.2 Intent Receiver

经过Intent Receiver 完成的运用能够对一个外部的事情作出呼应。Intent Receiver 在AndroidManifest.xml 中注册,也能够在代码中运用Context.registerReceiver()进行注册。当一个IntentReceiver 被触发时,运用不用对恳求调用Intent Receiver,体系会在需求的时分发动运用。各种运用还能够经过运用Context.

brOAdcastIntent()将它们自己的Intent Receiver播送给其他运用程序。

1.3 Service

Service 是一段长生命周期的、没有用户界面的程序。例如媒体播映器这个Activity 会运用Context.startService()来发动一个Service,然后能够在后台播映音乐。一起,体系也将坚持这个Service 一向履行,直到Service 运转完毕。体系可经过运用Context.bindService()办法,连接到一个Service 上(假如这个Service 还没有运转将发动它)。当连接到一个Service 之后,还能够运用Service 供给的接口与它通讯。就媒体播映器来说,还能够进行暂停、重播等操作。

1.4 Content Provider

Android 运用程序能够将它们的数据保存到文件、SQL 数据库,乃至是任何有用的设备中。Content Provider 完成了运用数据与其他的运用程序的同享。Content Provider 类完成一组规范的办法,能够让其他运用程序保存或读取此ContentProvider处理的各品种型数据。在Android 中,默许运用SQLite 作为体系数据库,但运用办法略有不同。Android 中每一个运用程序都运转在各自的进程中,当拜访其他运用程序的数据时,需求在不同的虚拟机之间传递数据,这样操作起来会有些困难(正常情况下,不能读取其他运用程序的数据库文件)。ContentProvider 正是处理不同的运用包同享数据的东西。

2 气候实况预告体系的详细完成

依据Android 渠道的智能手机拜访服务器的首要技能是数据交互办法。依据Android 操作体系的气候实况预告体系规划的中心是经过调用通讯协议SOAP(Simple Object AccessProtocol)的接口,从Web Service 供给商中提取气候预告的数据信息,为客户端服务。其根本功用是当用户运转气候预告体系程序时,在手机屏幕上显现出我国的城市称号,用户单击恣意一个城市名,可取得该城市的气候实况预告信息。用户也能够输入城市称号,点击查询取得气候预告信息。CitiesWeather-Forecast 工程目录结构及其源代码文件如图1所示。

2.1 Android渠道的用户界面完成

Android 供给的可改变的用户界面(UI)开发模块是依据XML 文件的。这些XML 文件放在工程/res/layout 下面。这个目录可包含一切运用程序所需的非码部分,比方图片、字符串、xml 文件。当要运用到这些资源时,在代码目录中翻开R.java文件即可。在XML 文件里修改界面的代码,完成起来不只便利,运用时也会愈加灵敏。

在Android 程序规划中要用到一些根本的Android UI 元素,经过运用Views、View Groups 和layouts 可为Activity 创立功用性的、赋有直观力的UI.一般是运用Android SDK 中供给的一些控件,进行布局、扩展和定制这些控件,并运用ViewGroups 去组合Views,创立由相互作用的子控件组成的原子的、重复运用的UI 元素。也能够创立自己的Views,来完成显现数据和与用户交互的新途径;或运用一些承继自View Group 的Layout 管理器来安排Android UI中的单个元素到屏幕上。

在一个Android 运用中,用户界面由View 和View Group目标构建。View 与View Group 有许多品种,而它们都是View类的子类。View 目标是Android 渠道顶用户界面的根本单元。View 类是widgets(东西)类的父类,它们供给了比方文本输入框和按钮之类的UI 目标的完好完成。View Group 类是Layouts(布局)类的父类,它们供给了比方流式布局、表格布局以及相对布局之类的布局架构。

View 目标是一个数据体,它的特点存储了用于屏幕上一块矩形区域的布局参数及内容。并担任它所辖的这个矩形区域之中一切丈量、布局、焦点转化、卷动以及按键/接触手势的处理。作为一个用户界面目标,View 一起也担任着用户交互要害点以及交互事情接受者的人物。气候实况预告体系程序功用比较单一,其UI 也相对比较简单,只需有一个输入框、一个查询按钮以及一个显现一切我国城市信息的列表即可。为了树立Android 渠道的用户界面,首要要在Package Explorer 窗口中打开Layout 后新建。xml 文件,用来对窗口界面进行布局,首要有体系运转的主配置文件main.xml 和result.xml.

Layout 是一类特别的ViewGroup 控件,它们自身没有任何可显现内容,存在的专一原因便是其间的内部结构,能够更好地摆放它的子控件。比方Linearlayout,可将子控件按水平或笔直方向按顺序摆放下去;Tablelayout,能够将子控件依照表格的办法,一枚枚放置好;Relativelayout 更灵敏,能够设定各个控件之间的对齐和摆放联系,合适定制杂乱的界面。有了Layout 的存在,控件和控件之间不再是分裂地存在,而是更有机地结合在一起,设定起来也更为便利。在本实例的main.xml 文件中首要是增加一些界面的布局设置,例如如下代码:

LinearLayout

android:orientation=horizontal

android:layout_width=fill_parent

android:layout_height=wrap_content

>

EditText android:id=@+id/cityText

android:layout_width=wrap_content

android:layout_height=wrap_content

android:text=@string/cityText/>

Button android:id=@+id/searchBtn

android:layout_width=wrap_content

android:layout_height=wrap_content

android:text=@string/searchBtn/>

/LinearLayout>

上述代码生成了一个Linearlayout,界说了一个EditText 和Button,而且设置了相关的参数。在Android 中,控件最重要的巨细特点是width/height,开发者能够指明控件的巨细,控件的宽、高以及在屏幕中的显现方位等,能够设定成为fill_parent 和wrap_content.别的,还能够设置相应的文本信息,并可经过android:text=@string/cityText/>进行引证(string 文件存放在工程的res/values 中)。依照这种办法,还能够依据需求界说相应的布局控件,比如界说用来出现气候实况信息的UI等。

2.2 创立我国城市列表数据

依据气候预告体系功用需求剖析,体系发动后,应在主界面上出现出我国国内一切城市的列表数据,因而需求创立我国城市列表数据,包含获取、解析城市列表数据,并在用户界面上出现出来。为此,需求处理的问题是手机终端从Web 服务器获取了一切类型的数据之后,将这些数据进一步交给Android 手机终端View 组件[4],在手机界面上显现给用户。

⑴ 获取城市列表数据

Android 没有供给Web Service 的组件库,但能够经过修改在PC 或J2ME 上运用的开源Web Service Java 库作为AndroidWeb Servic 库运用。kSOAP2(http://ksoap2.sourceforge.net)是一个在智能手机上的SOAP Web Service 客户端包,可用于资源受限制的Java 环境如Applets 或J2ME 运用程序。在GoogleCode 上有一个项目ksoap2-android(http://code.google.com/p/ksoap2-android/)可用在Android 渠道上完成轻量级的SOAP 库,即运用ksoap2-android 的API 来调用远端Web Service 的服务。

因而需求在CitiesWeatherForecast.java 的onCreate()中进行数据获取的初始化作业。经过界说一个办法public ListString>getAllCitiesNAMEs()可取得我国城市称号列表。也便是说,采用它供给的取得全球各个国家城市的办法GetCitiesByCountry,经过http://www.webservicex.net/globalweather.asmx 上的WebService 可供给气候预告服务。比如,经过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 目标来调用WebService,并取得xml 字符串数据,其代码段如下:

AndroidHttpTransport androidHttpTransport=

new AndroidHttpTransport (Constant.URL);

try {

androidHttpTransport.call(soapAction, envelope);

Object result=envelope.getResponse();

xmlStr=result.toString();

} catch(Exception e) {

e.printStackTrace();

}

⑵ 解析数据列表

Android 操作体系对xml 字符串数据的操作功用很强,供给了dom、sax 以及xmlpul 3 种办法。Android SDK 供给了android.sax 包以便利SAX Handler 的开发,可用来解析xml 成果字符串。在本规划实例的CitiesWeatherForecast.java 文件中,解析xml 数据时,先经过RootElement root=new RootElement(NewDataSet)取得xml 数据的根节点;然后再寻觅其子节点直到找到City 子节点,并设置一个监听器setEndTextElementListener()来取得City 子节点的值;最终运用org.xml.sax 的SAXParser 来解析xml 数据,把数据存入ListString>并回来:

SAXParserFactory factory=SAXParserFactory.newInstance();

SAXParser parser=factory.newSAXParser();

XMLReader xmlreader=parser.getXMLReader();

xmlreader.setContentHandler(root.getContentHandler());

InputSource is=new InputSource

(new StringBufferInputStream(xmlStr));

xmlreader.parse(is);

⑶ 在UI上出现城市列表数据

当取得ListString>类型的数据之后,就能够把它绑定到main.xml 界说的ListView 组件上,然后运用ListActivity 出现列表数据。在CitiesWeatherForecast.java 中的代码段为:

ListString> cityList=getAllCitiesNames();

setListAdapter(new ArrayAdapterString>(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 渠道的开发技能还需求进一步完善,需求在日后的作业中不断探究、研讨,以树立有用的城市气候实况预告体系。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/188392.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部