Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> 系出名門Android(10) - HTTP通信,XML解析,通過Hander實現異步消息處理

系出名門Android(10) - HTTP通信,XML解析,通過Hander實現異步消息處理

編輯:Android開發教程

介紹

在 Android 中與服務端做 HTTP 通信,解析 XML,通過 Handler 實現異步消息處理

HTTP 通信 - 與服務端做 HTTP 通信,分別以 GET 方式和 POST 方式做演示

XML 解析 - 可以用兩種方式解析 XML,分別是 DOM 方式和 SAX 方式

異步消息處理 - 通過 Handler 實現異步消息處理,以一個自定義的異步下載類來說明 Handler 的用法

1、HTTP 通信和 XML 解析的 Demo

MySAXHandler.java

package com.webabcd.communication;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

// 繼承 DefaultHandler 以實現指定 XML 的 SAX 解析器
// DOM - W3C 標准,需要把 xml 數據全部加載完成後才能對其做解析,可對樹做任意遍歷
// SAX - 流式解析,通過事件模型解析 xml,只能順序解析
public class MySAXHandler extends DefaultHandler {

    private boolean mIsTitleTag=false;
    private boolean mIsSalaryTag=false;
    private boolean mIsBirthTag=false;
    private String mResult="";

    // 打開 xml 文檔的回調函數
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
    }

    // 關閉 xml 文檔的回調函數
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
    }

    // 一發現元素開始標記就回調此函數
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        if (localName == "title")
            mIsTitleTag=true;
        else if (localName == "salary")
            mIsSalaryTag=true;
        else if (localName == "dateOfBirth")
            mIsBirthTag=true;
        else if (localName == "employee")
            mResult += "\nname:" + attributes.getValue("name");    
    }

    // 一發現元素結束標記就回調此函數
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if (localName == "title")
            mIsTitleTag=false;
        else if (localName == "salary")
            mIsSalaryTag=false;
        else if (localName == "dateOfBirth")
            mIsBirthTag=false;
    }

    // 一發現元素值或屬性值就回調此函數
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if (mIsTitleTag)
            mResult += new String(ch, start, length);
        else if (mIsSalaryTag)
            mResult += " salary:" + new String(ch, start, length);
        else if (mIsBirthTag)
            mResult += " dateOfBirth:" + new String(ch, start, length);
    }

    public String getResult(){
        return mResult;
    }
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved