您现在的位置: 万盛学电脑网 >> 程序编程 >> 网络编程 >> 安卓开发 >> 正文

在 Android 上使用 XML是如何进行的

作者:佚名    责任编辑:admin    更新时间:2022-06-22

本文导航

1、首页2、使用 SAX-23、更加简单的 SAX 解析-34、XML pull 解析器-4

这是我们为大家提供的一篇介绍在 Android 上使用 XML是如何进行的的文章,接下来就让我们一起来了解一下吧!

简介: Android 是针对移动设备的一种新兴的开源操作系统和 SDK。借助它,您可以创建功能强大的移动应用程序。当您的应用程序可以访问 Web 服务时,其吸引力会大大增加,这意味着您需要使用 Web 语言:XML。在本文中,您将了解在 Android 上使用 XML 的不同方法,以及如何使用它们构建自己的 Android 应用程序。

入门

在本文中,您将学习如何构建通过 Internet 使用 XML 的 Android 应用程序。Android 应用程序是使用 Java™ 编程语言编写的,因此具备 Java 技术方面的经验是必需的。要进行 Android 开发,您需要使用 Android SDK。本文中的所有代码适用于任何版本的 Android SDK,但 SDK 1.5_pre 是用于开发代码的。您可以使用 SDK 和一个文本编辑器来开发 Android 应用程序,但使用 Android Developer Tools (ADT)(一款 Eclipse 插件)会更加简单。在本文中,我们使用 0.9 版本的 ADT 和 Eclipse 3.4.2, Java 版本。有关所有这些工具的链接,请参见 参考资料。

Android 上的 XML

Android 平台是一个开源移动开发平台。它允许您访问各种移动设备的所有方面,这些移动设备从低级图形设备到手机摄像头上的硬件不一而足。由于 Android 可以实现这么丰富的功能,因此您可能想知道为何还要为 XML 伤脑筋呢。并不是因为使用 XML 是多么地有趣;而是因为它能提供一些特殊的支持。XML 经常用作 Internet 上的一种数据格式。如果您希望通过 Internet 访问数据,则数据很有可能是 XML 格式。如果您希望发送数据给 Web 服务,那么您可能也需要发送 XML。简而言之,如果您的 Android 应用程序将利用 Internet,那么您可能需要使用 XML。幸运的是,您可以采用多种方法在 Android 上使用 XML。

XML 解析器

常用缩略语

API:应用程序编程接口(Application programming interface)

RSS:Really Simple Syndication

SDK:软件开发包(Software Developers Kit)

UI:用户界面(User interface)

URL:通用资源定位符(Universal Resource Locator)

XML:可扩展标记语言(Extensible Markup Language)

Android 平台最大的一个优势在于它利用了 Java 编程语言。Android SDK 并未向您的标准 Java Runtime Environment (JRE) 提供一切可用功能,但它支持其中很大一部分功能。Java 平台支持通过许多不同的方式来使用 XML,并且大多数与 XML 相关的 Java API 在 Android 上得到了完全支持。举例来说,Java 的 Simple API for XML (SAX) 和 Document Object Model (DOM) 在 Android 上都是可用的。这些 API 多年以来一直都是 Java 技术的一部分。较新的 Streaming API for XML (StAX) 在 Android 中并不可用。但是, Android 提供了一个功能相当的库。最后,Java XML Binding API 在 Android 中也不可用。这个 API 已确定可以在 Android 中实现。但是,它更倾向于是一个重量级的 API,需要使用许多不同类的实例来表示 XML 文档。因此,这对于受限的环境,比如说 Android 针对的手持设备,不太理想。在后续小节中,我们将以 Internet 上的一个简单的 XML 源为例,来看看如何在 Android 应用程序中使用上述各种 API 来解析它。首先,我们来看看这个简单应用程序的主要部分,它将通过 Internet 来使用 XML。

Android 新闻阅读器

应用程序将从热门 Android 开发人员站点 Androidster 获取一个 RSS 提要,并将它解析为一组简单的 Java 对象,您可以使用这些对象构建一个 Android ListView(参见 下载 部分获取源代码)。这是一种典型的多态行为 — 提供相同行为的不同实现(不同的 XML 解析算法)。清单 1 展示了如何在 Java 代码中使用一个接口建立这一模型。

清单 1. XML 提要解析器接口[size=0.76em]

package org.developerworks.android;

import java.util.List;

public interface FeedParser {

List parse();

}

复制代码

在 清单 2 中,Message 类是一个典型的 Plain Old Java Object (POJO),它表示一种数据结构。

清单 2. Message POJO

public class Message implements Comparable{

static SimpleDateFormat FORMATTER =

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");

private String title;

private URL link;

private String description;

private Date date;

// getters and setters omitted for brevity

public void setLink(String link) {

try {

this.link = new URL(link);

} catch (MalformedURLException e) {

throw new RuntimeException(e);

}

}

public String getDate() {

return FORMATTER.format(this.date);

}

public void setDate(String date) {

// pad the date if necessary

while (!date.endsWith("00")){

date += "0";

}

try {

this.date = FORMATTER.parse(date.trim());

} catch (ParseException e) {

throw new RuntimeException(e);

}

}

@Override

public String toString() {

// omitted for brevity

}

@Override

public int hashCode() {

// omitted for brevity

}

@Override

public boolean equals(Object obj) {

// omitted for brevity

}

// sort by date

public int compareTo(Message another) {

if (another == null) return 1;

// sort descending, most recent first

return another.date.compareTo(date);

}

}

复制代码

清单 2 中的消息基本上是相当直观的。通过允许日期和链接作为简单的对象被访问,同时将它们表示为较强类型的对象(java.util.Date 和java.net.URL),它隐藏了一些内部状态。它是一个典型的 Value Object,因此它基于其内部状态实现了equals() 和 hashCode()。它还实现了Comparable 接口,因此您可以使用它进行排序(按日期)。在实践中,提要中的数据始终是有序的,因为没有必要再进行排序。

每个解析器实现都需要提供一个 URL 给 Androidster 提要,并使用它打开一个到 Androidster 站点的 HTTP 连接。这一常见行为自然是在 Java 代码中建模,我们使用了一个抽象基类,如 清单 3 所示。

清单 3. 基本提要解析器类

public abstract class BaseFeedParser implements FeedParser {

// names of the XML tags

static final String PUB_DATE = "pubDate";

static final  String DESCRIPTION = "description";

static final  String LINK = "link";

static final  String TITLE = "title";

static final  String ITEM = "item";

final URL feedUrl;

protected BaseFeedParser(String feedUrl){

try {

this.feedUrl = new URL(feedUrl);

} catch (MalformedURLException e) {

throw new RuntimeException(e);

}

}

protected InputStream getInputStream() {

try {

return feedUrl.openConnection().getInputStream();

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

复制代码

基类存储 feedUrl 并使用它打开了一个 java.io.InputStream。如果出现任何差错,它会抛出一个 RuntimeException,造成应用程序出现故障。基类还为标记的名称定义了一些简单的常量。清单 4 显示了提要中的一些示例内容,以便于您理解这些标记的重要性。

清单 4. 示例 XML 提要

android_news

[url]http://www.androidster.com/android_news.php[/url]

Sun, 19 Apr 2009 19:43:45 +0100

FeedCreator 1.7.2

[url]http://www.androidster.com/android_news/samsung-s8000-to-run-android-[/url]

play-divx-take-over-the-world

More details have emerged on the first Samsung handset

to run Android. A yet-to-be announced phone called the S8000 is being

reported ...

Thu, 16 Apr 2009 07:18:51 +0100

 

</ <div class="ad2"> <script language='javascript' src='/AD/201510/8.js'></script> </div> </DIV> <div> <DIV class="pageNum"><ul><li>上一个程序编程: <a class='LinkPrevArticle' href='/programming/networkprogramming/android/201510/158633.html' title='文章标题:Android动画框架的讲解 作    者:佚名 更新时间:2015-10-21 14:40:27'>Android动画框架的讲解</a></li><li>下一个程序编程: <a class='LinkNextArticle' href='/programming/networkprogramming/android/201510/158635.html' title='文章标题:Android 开发如何使用 SQLite 数据库进行工作 作    者:佚名 更新时间:2015-10-21 14:40:29'>Android 开发如何使用 SQLite 数据库进行工作</a></li></ul></DIV> </div> <DIV class=clear></DIV> </DIV> <DIV class=clear></DIV> </DIV> <DIV class=clear></DIV> <DIV class=cont-left-div-2> <H2 style="text-align:left">安卓开发排行</H2> <UL> <LI><A class="font7 nleft" title="xml转化html的方法" href="/programming/networkprogramming/android/201510/158509.html">xml转化html的方法</A></LI> <LI><A class="font7 nleft" title="android EDITTEXT调用和隐藏输入法" href="/programming/networkprogramming/android/201510/74549.html">android EDITTEXT调用和隐藏输入法</A></LI> <LI><A class="font7 nleft" title="Android:Service之基础" href="/programming/networkprogramming/android/201510/74467.html">Android:Service之基础</A></LI> <LI><A class="font7 nleft" title="如何在iOS设备中开启屏幕缩放功能" href="/programming/networkprogramming/android/201510/158621.html">如何在iOS设备中开启屏幕缩放功能</A></LI> <LI><A class="font7 nleft" title="Ubuntu桌面操作快捷键有哪些" href="/programming/networkprogramming/android/201510/158605.html">Ubuntu桌面操作快捷键有哪些</A></LI> <LI><A class="font7 nleft" title="HTML组件三最顶级页面的设置方法" href="/programming/networkprogramming/android/201510/158500.html">HTML组件三最顶级页面的设置方法</A></LI> <LI><A class="font7 nleft" title="Android 动画效果中Animation 动画的讲解" href="/programming/networkprogramming/android/201510/158640.html">Android 动画效果中Animation 动画的讲解</A></LI> <LI><A class="font7 nleft" title="html5文本向上循环滚动的方法" href="/programming/networkprogramming/android/201510/158436.html">html5文本向上循环滚动的方法</A></LI> <LI><A class="font7 nleft" title="Android中的文件I/O操作" href="/programming/networkprogramming/android/201510/74532.html">Android中的文件I/O操作</A></LI> <LI><A class="font7 nleft" title="HTML5图片预览的方法" href="/programming/networkprogramming/android/201510/158439.html">HTML5图片预览的方法</A></LI> </UL> </DIV> <DIV class=clear></DIV> <DIV id=guanggao6></DIV> <DIV class="cont-left-div-3 nleft"> <H2 style="text-align:left">程序编程推荐</H2> <UL> <LI><A class="font7 nleft" title="php实现读取内存顺序号" href="/programming/networkprogramming/php/201510/64526.html">php实现读取内存顺序号</A></LI> <LI><A class="font7 nleft" title="CSS 文本渲染属性text-rendering的介绍和使…" href="/programming/webproduction/divcss/201510/34446.html">CSS 文本渲染属性text-rendering的介绍和使…</A></LI> <LI><A class="font7 nleft" title="HTML5的新功能" href="/programming/webproduction/html5/201510/157793.html">HTML5的新功能</A></LI> <LI><A class="font7 nleft" title="JS网页在线获取鼠标坐标值的方法" href="/programming/scripttopics/javascript/201510/69673.html">JS网页在线获取鼠标坐标值的方法</A></LI> <LI><A class="font7 nleft" title="5 个不能不看的 HTML5 + JavaScript 效果" href="/programming/webproduction/html5/201510/35588.html">5 个不能不看的 HTML5 + JavaScript 效果</A></LI> <LI><A class="font7 nleft" title="Dreamweaver8.0.2后中为Flash添加透明" href="/programming/webproduction/dreamweaver/201510/40562.html">Dreamweaver8.0.2后中为Flash添加透明</A></LI> </UL> </DIV> <DIV class="cont-left-div-3 nright"> <H2 style="text-align:left">热门文章</H2> <div class="rmwz"> <div class="wz_rmtj"> [<a class="" href="/mobile/mbileapplications/iPhone/Index.html">iPhone</a>]<a class="" href="/mobile/mbileapplications/iPhone/201510/50230.html" title="iPhone6录音如何导出?" target="_self">iPhone6录音如何导出?</a></div><div class="wz_rmtj"> [<a class="" href="/mobile/mbileapplications/iPhone/Index.html">iPhone</a>]<a class="" href="/mobile/mbileapplications/iPhone/201510/49081.html" title="苹果手机qq怎么没有提示消息啊?" target="_self">苹果手机qq怎么没有提示…</a></div><div class="wz_rmtj"> [<a class="" href="/system/windowsxptutorials/Index.html">Windows xp教程</a>]<a class="" href="/system/windowsxptutorials/201510/130376.html" title="Windows不重启就使环境变量修改生效" target="_self">Windows不重启就使环境变…</a></div><div class="wz_rmtj"> [<a class="" href="/programming/networkprogramming/diannet/Index.html">.net编程</a>]<a class="" href="/programming/networkprogramming/diannet/201510/148098.html" title="NET编程" target="_self">NET编程</a></div><div class="wz_rmtj"> [<a class="" href="/based/computerentry/Index.html">电脑入门</a>]<a class="" href="/based/computerentry/201510/129424.html" title="组策略:退出时不保存桌面设置" target="_self">组策略:退出时不保存桌…</a></div><div class="wz_rmtj"> [<a class="" href="/based/basiccomputerknowl/Index.html">电脑基本常识</a>]<a class="" href="/based/basiccomputerknowl/201510/139033.html" title="cpu风扇怎么拆?" target="_self">cpu风扇怎么拆?</a></div> </div> </DIV> <DIV class=clear></DIV> </DIV> <DIV class="nright cont-right"> <DIV class=guanggao1 id=guanggao_r1></DIV> <DIV class=clear></DIV> <DIV class=cont-right-div1> <H2>相关文章</H2> <DIV class=clear></DIV> <div class=cont-right-list1> <a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158658.html' title='文章标题:全 Javascript 的 Web 开发架构:MEAN解析 作    者:佚名 更新时间:2015-10-21 14:41:19' target="_self">全 Javascript 的 Web 开发架构:MEAN解析</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158649.html' title='文章标题:在AMD的WIN7上搭建IOS开发环境 作    者:佚名 更新时间:2015-10-21 14:40:53' target="_self">在AMD的WIN7上搭建IOS开发环境</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158644.html' title='文章标题:Android基础知识相关介绍 作    者:佚名 更新时间:2015-10-21 14:40:43' target="_self">Android基础知识相关介绍</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158642.html' title='文章标题:Android无线网络使用无线键盘、触摸屏操作手机是如何进行的 作    者:佚名 更新时间:2015-10-21 14:40:42' target="_self">Android无线网络使用无线键盘、触摸屏操作手…</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158640.html' title='文章标题:Android 动画效果中Animation 动画的讲解 作    者:佚名 更新时间:2015-10-21 14:40:40' target="_self">Android 动画效果中Animation 动画的讲解</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158639.html' title='文章标题:Android开发四大组件的过程及方法 作    者:佚名 更新时间:2015-10-21 14:40:38' target="_self">Android开发四大组件的过程及方法</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158637.html' title='文章标题:对Android 传感器的探讨 作    者:佚名 更新时间:2015-10-21 14:40:37' target="_self">对Android 传感器的探讨</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158635.html' title='文章标题:Android 开发如何使用 SQLite 数据库进行工作 作    者:佚名 更新时间:2015-10-21 14:40:29' target="_self">Android 开发如何使用 SQLite 数据库进行工…</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158633.html' title='文章标题:Android动画框架的讲解 作    者:佚名 更新时间:2015-10-21 14:40:27' target="_self">Android动画框架的讲解</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158632.html' title='文章标题:移动支付之智能IC卡与Android手机的NFC通信如何实现 作    者:佚名 更新时间:2015-10-21 14:40:26' target="_self">移动支付之智能IC卡与Android手机的NFC通信…</a><br><a class='LinkArticleCorrelative' href='/programming/networkprogramming/android/201510/158631.html' title='文章标题:移动支付之Android HCE的使用方法 作    者:佚名 更新时间:2015-10-21 14:40:26' target="_self">移动支付之Android HCE的使用方法</a><br> </div> </DIV> <div class="guanggao1 margin2" > <script language='javascript' src='/AD/201510/4.js'></script> </div> <DIV class=cont-right-div1> <H2>图片文章</H2> <DIV class=clear></DIV> <DIV class=p3 > <H3 class=font6><A class=font6 title="如何查看IE版本,教你如何查看IE浏览器版本 …" href="/based/computerentry/201510/159972.html">如何查看IE版本,教你如何查看IE浏览器版本 …</A></H3> <DIV class=clear></DIV> <DIV class="p2-pic1 nleft"><A title="如何查看IE版本,教你如何查看IE浏览器版本 …" href="/based/computerentry/201510/159972.html"><img class='pic1' src='/based/UploadFiles_8790/201510/2015102116515033.jpg' width='90' height='60' border='0'></DIV> <DIV class="p2-zi1 nright"> <P><A class=font7 href="/based/computerentry/201510/159972.html"> 查看IE浏览器版本的方法:   第一步:打开IE浏览器,点击上方工具栏上的“帮助(H</A>…</P> </DIV> </DIV> <DIV class=p3 > <H3 class=font6><A class=font6 title="美图秀秀拨开雾霾 还北京一个清爽的天" href="/software/graphicprocessing/meituxx/201510/114235.html">美图秀秀拨开雾霾 还北京一个清爽的天</A></H3> <DIV class=clear></DIV> <DIV class="p2-pic1 nleft"><A title="美图秀秀拨开雾霾 还北京一个清爽的天" href="/software/graphicprocessing/meituxx/201510/114235.html"><img class='pic1' src='/software/UploadFiles_4648/201510/2015101619171337.jpg' width='90' height='60' border='0'></DIV> <DIV class="p2-zi1 nright"> <P><A class=font7 href="/software/graphicprocessing/meituxx/201510/114235.html">最近北京城持续被雾霾笼罩,让很多人陷入“雾里看花”的境地。而微博上被热传的那张&ldqu</A>…</P> </DIV> </DIV> <DIV class=p3 > <H3 class=font6><A class=font6 title="360随身WiFi怎么设置隐藏信号" href="/software/mediatools/201510/89962.html">360随身WiFi怎么设置隐藏信号</A></H3> <DIV class=clear></DIV> <DIV class="p2-pic1 nleft"><A title="360随身WiFi怎么设置隐藏信号" href="/software/mediatools/201510/89962.html"><img class='pic1' src='/software/UploadFiles_4648/201510/2015101517482507.jpg' width='90' height='60' border='0'></DIV> <DIV class="p2-zi1 nright"> <P><A class=font7 href="/software/mediatools/201510/89962.html">   1、首先将360随身wifi插入电脑创建好wifi信号,然后用手机连接到该网络上,手机连接到该网</A>…</P> </DIV> </DIV> <DIV class=p3 > <H3 class=font6><A class=font6 title="菜单文件的类型,结构及使用" href="/software/graphicprocessing/cad/cadtutorial/cjaljiexi/201510/39464.html">菜单文件的类型,结构及使用</A></H3> <DIV class=clear></DIV> <DIV class="p2-pic1 nleft"><A title="菜单文件的类型,结构及使用" href="/software/graphicprocessing/cad/cadtutorial/cjaljiexi/201510/39464.html"><img class='pic1' src='/software/UploadFiles_4648/201510/2015101309044760.jpg' width='90' height='60' border='0'></DIV> <DIV class="p2-zi1 nright"> <P><A class=font7 href="/software/graphicprocessing/cad/cadtutorial/cjaljiexi/201510/39464.html">34.1.1 菜单文件简介    菜单文件用于定义菜单,AutoCAD系</A>…</P> </DIV> </DIV> </DIV> </DIV> <DIV class=clear></DIV> </DIV> <DIV class=clear></DIV> <div class=panel> <div class="panel-2 flink"> <H2><A class=Bottom href="http://www.wsxdn.com/" target=_blank>万盛电脑知识网</A> | <A onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.wsxdn.com');" class=Bottom href="#">设为首页</A> | <A class=Bottom href="javascript:window.external.addFavorite('http://www.wsxdn.com','万盛学电脑网');">加入收藏</A> | <A class=Bottom href="/Copyright.asp" target=_blank>关于我们</A></H2></div> <div class=hackbox></div></div><FOOTER> <div class=footer>Copyright © 2015 万盛学电脑网 Allright Reserved. <script language='javascript' src='/AD/201510/9.js'></script><BR></div></FOOTER> </div> </BODY></HTML>