萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 安卓開發 >> 在 Android 上使用 XML是如何進行的

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

本文導航

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 async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4480737146802772" crossorigin="anonymous"></script><!-- twcomputer 1 --><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4480737146802772" data-ad-slot="8513175065" data-ad-format="auto" data-full-width-responsive="true"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div> <div class="pageNum"> <ul> <li>上一頁:<a class='LinkPrevArticle' href='https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158633.html' >Android動畫框架的講解</a></li><li>下一頁:<a class='LinkNextArticle' href='https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158635.html' >Android 開發如何使用 SQLite 數據庫進行工作</a></li> </ul> </div> </div> <div class=kenbxne_js></div> </div> <div class=kenbxne_js></div> </div> <div class=kenbxne_js></div> <div class=hebxbne_left-div-2> <h2 style="text-align:left">安卓開發排行</h2> <ul> <li><a class="font7 nleft" title="設計師應該了解的iOS應用開發基礎知識" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158657.html">設計師應該了解的iOS應用開發基礎知識</a></li> <li><a class="font7 nleft" title="一看就懂的Android APP開發入門教程" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74403.html">一看就懂的Android APP開發入門教程</a></li> <li><a class="font7 nleft" title="檢測android數據庫版本是否更改的方" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158345.html">檢測android數據庫版本是否更改的方</a></li> <li><a class="font7 nleft" title="android調用浏覽器打開鏈接的方法" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158352.html">android調用浏覽器打開鏈接的方法</a></li> <li><a class="font7 nleft" title="apply sdcard:update.zip是什麼意思" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74639.html">apply sdcard:update.zip是什麼意思</a></li> <li><a class="font7 nleft" title="Android應用開發環境集成" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74684.html">Android應用開發環境集成</a></li> <li><a class="font7 nleft" title="Android 通用型手電筒代碼" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74365.html">Android 通用型手電筒代碼</a></li> <li><a class="font7 nleft" title="HTML meta的作用是什麼?" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158419.html">HTML meta的作用是什麼?</a></li> <li><a class="font7 nleft" title="Intent和IntentFilter詳解" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74659.html">Intent和IntentFilter詳解</a></li> <li><a class="font7 nleft" title="Android Studio發布APK 方法" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74586.html">Android Studio發布APK 方法</a></li> </ul> </div> <div class=kenbxne_js></div> <div id=guanggao6></div> <div class="hebxbne_left-div-3 nleft"> <h2 style="text-align:left">程序編程推薦</h2> <ul> <li><a class="font7 nleft" title="PHP結合HTML5使用FormData對象提交表單及上傳圖片" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158589.html">PHP結合HTML5使用FormData對象提交表單及上傳圖片</a></li> <li><a class="font7 nleft" title="Android中的文件I/O操作" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74532.html">Android中的文件I/O操作</a></li> <li><a class="font7 nleft" title="android保存圖片到SD卡並以時間命名" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74706.html">android保存圖片到SD卡並以時間命名</a></li> <li><a class="font7 nleft" title="Android設置定時執行執行一次任務" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74547.html">Android設置定時執行執行一次任務</a></li> <li><a class="font7 nleft" title="Android實現多線程斷點下載的方法" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/74377.html">Android實現多線程斷點下載的方法</a></li> <li><a class="font7 nleft" title="易於開發的移動應用開發框架介紹" href="https://twcomputer.wsxdn.com/programming/networkprogramming/android/201510/158677.html">易於開發的移動應用開發框架介紹</a></li> </ul> </div> <div class="hebxbne_left-div-3 nright"> <h2 style="text-align:left">熱門文章</h2> <div class="rmwz"> <div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/programming/servertutorials/">服務器教程</a>]<a class="" href="https://twcomputer.wsxdn.com/programming/servertutorials/201510/97130.html" title="Linux查看文件內容、創建、查看軟硬鏈接命令" target="_self">Linux查看文件內容、創建、查看軟…</a></div><div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/software/graphicprocessing/designtheory/">平面設計理論</a>]<a class="" href="https://twcomputer.wsxdn.com/software/graphicprocessing/designtheory/201510/111876.html" title="網頁配色需盡量不要使用黑色" target="_self">網頁配色需盡量不要使用黑色</a></div><div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/cybersecurity/applicationtechnolo/">網絡應用技術</a>]<a class="" href="https://twcomputer.wsxdn.com/cybersecurity/applicationtechnolo/201510/9220.html" title="U盤中毒了怎麼辦" target="_self">U盤中毒了怎麼辦</a></div><div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/cybersecurity/applicationtechnolo/applicationtutorial/">應用教程</a>]<a class="" href="https://twcomputer.wsxdn.com/cybersecurity/applicationtechnolo/applicationtutorial/201510/132026.html" title="無線局域網故障問題集錦" target="_self">無線局域網故障問題集錦</a></div><div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/mobile/mbileapplications/anzhuo/">安卓教程</a>]<a class="" href="https://twcomputer.wsxdn.com/mobile/mbileapplications/anzhuo/201510/59823.html" title="安卓圖庫如何隱藏不願顯示的圖片及目錄" target="_self">安卓圖庫如何隱藏不願顯示的圖片及目錄</a></div><div class="wz_rmtj"> [<a class="" href="https://twcomputer.wsxdn.com/programming/servertutorials/">服務器教程</a>]<a class="" href="https://twcomputer.wsxdn.com/programming/servertutorials/201510/97565.html" title="用注冊表 刪除多余網卡本地連接" target="_self">用注冊表 刪除多余網卡本地連接</a></div> </div> </div> <div class=kenbxne_js></div> </div> <div class="nright hebxbne_right"> <div class=guanggao1 id=guanggao_r1></div> <div class=kenbxne_js></div> <div class=hebxbne_right-div1> <h2>相關文章</h2> <div class=kenbxne_js></div> <ul class=hebxbne_right-list1> <li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/dtabase/mssql/201607/173484.html' target="_self">Windows2012配置SQLServer2014AlwaysOn的圖解</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/dtabase/mssql/201607/173477.html' target="_self">我也有微信朋友圈了 Android實現</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/servertutorials/201602/171665.html' target="_self">Linux系統下glibc導致kernel panic的問題修復方法</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/webproduction/divcss/201602/171446.html' target="_self">divcssimportant會被IE忽略的方法</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/webproduction/divcss/201601/170598.html' target="_self">cssimportant會被IE忽略的技巧</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/dtabase/mssql/201601/170556.html' target="_self">SQL Server中避免觸發鏡像SUSPEND的N種方法</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/webproduction/divcss/201601/170044.html' target="_self">div與span的區別是什麼呢</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/servertutorials/201601/169642.html' target="_self">Linux系統開機黑屏提示kernel panic該怎麼辦?</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/servertutorials/201601/169623.html' target="_self">詳解Linux中查找目錄和文件的find和locate命令</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/servertutorials/201601/168786.html' target="_self">Linux系統上Nginx+Python的web.py與Django框架環境</a></li><li><a class='LinkArticleCorrelative' href='https://twcomputer.wsxdn.com/programming/servertutorials/201601/168785.html' target="_self">Linux下將Python的Django項目部署到Apache服務器</a></li> </ul> </div> <div class="guanggao1 margin2" > </div> <div class=hebxbne_right-div1> <h2>圖片文章</h2> <div class=kenbxne_js></div> <div class=p3 > <h3 class=font6><a class=font6 title="IOS機Android切圖標注與命名規范" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/31159.html">IOS機Android切圖標注與命名規范</a></h3> <div class=kenbxne_js></div> <div class="p2-pic1 nleft"><a title="IOS機Android切圖標注與命名規范" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/31159.html"><img loading='lazy' class='pic1' src='https://twcomputer.wsxdn.com/programming/UploadFiles_4795/201510/2015101010482849.jpg' width='90' height='60' border='0'></a></div> <div class="p2-zi1 nright"> <p><a class=font7 href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/31159.html">   IOS機Android切圖標注與命名規范</a>…</p> </div> </div> <div class=p3 > <h3 class=font6><a class=font6 title="清爽網頁橫幅設計過程" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32655.html">清爽網頁橫幅設計過程</a></h3> <div class=kenbxne_js></div> <div class="p2-pic1 nleft"><a title="清爽網頁橫幅設計過程" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32655.html"><img loading='lazy' class='pic1' src='https://twcomputer.wsxdn.com/programming/UploadFiles_4795/201510/2015101015402416.jpg' width='90' height='60' border='0'></a></div> <div class="p2-zi1 nright"> <p><a class=font7 href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32655.html">清爽網頁橫幅設計過程</a>…</p> </div> </div> <div class=p3 > <h3 class=font6><a class=font6 title="Andrew的咖啡人生 破壞性創新和商業模式" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32653.html">Andrew的咖啡人生 破壞性創新和商業模式</a></h3> <div class=kenbxne_js></div> <div class="p2-pic1 nleft"><a title="Andrew的咖啡人生 破壞性創新和商業模式" href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32653.html"><img loading='lazy' class='pic1' src='https://twcomputer.wsxdn.com/programming/UploadFiles_4795/201510/2015101015402140.jpg' width='90' height='60' border='0'></a></div> <div class="p2-zi1 nright"> <p><a class=font7 href="https://twcomputer.wsxdn.com/programming/webproduction/interactivedesign/201510/32653.html">見到Andrew時,他正感冒,整個人看起來也比較頹廢。不過英國設計師大多給人就是病泱泱的感覺,不像美國設計師那麼</a>…</p> </div> </div> <div class=p3 > <h3 class=font6><a class=font6 title="讓你的dw也支持像php樣具有jquery提示功能" href="https://twcomputer.wsxdn.com/programming/webproduction/dreamweaver/201510/40547.html">讓你的dw也支持像php樣具有jquery提示功能</a></h3> <div class=kenbxne_js></div> <div class="p2-pic1 nleft"><a title="讓你的dw也支持像php樣具有jquery提示功能" href="https://twcomputer.wsxdn.com/programming/webproduction/dreamweaver/201510/40547.html"><img loading='lazy' class='pic1' src='https://twcomputer.wsxdn.com/programming/UploadFiles_4795/201510/2015101309461041.jpg' width='90' height='60' border='0'></a></div> <div class="p2-zi1 nright"> <p><a class=font7 href="https://twcomputer.wsxdn.com/programming/webproduction/dreamweaver/201510/40547.html">這是一個cs插件的講述,我們來告訴你讓你的dw也支持像php樣具有jquery提示功能,對於經常用到jquery</a>…</p> </div> </div> </div> </div> <div class=kenbxne_js></div> </div> <div class=kenbxne_js></div> <div class=plnebxmj> <div class="plnebxmj-2 flink"> <h2><a class=bottom href="https://twcomputer.wsxdn.com/" target=_blank>萬盛學電腦網</a> | <a class=bottom onclick="this.style.behavior='url(#default#homepage)';this.sethomepage('https://twcomputer.wsxdn.com');" href="#">設為首頁</a> | <a class=bottom href="javascript:window.external.addfavorite('https://twcomputer.wsxdn.com','萬盛學電腦網');">加入收藏</a></h2> </div> <div class=knemnnx></div> </div> <div class="ojwbxnks">copyright © <a title="萬盛學電腦網" href="https://twcomputer.wsxdn.com/" target=_blank>萬盛學電腦網</a> all rights reserved <br> </div> </div> </body> </html>