編輯:關於Android編程
所謂SAX,就是SAX simple API for XML,是一個解析XML文件的簡單API。
SAX解析XML的工作原理,是對文檔進行順序掃描,當掃描到文檔開始與結束,元素開始與結束,觸發相應的響應函數。是一種事件驅動型的解析方式。它可以在解析文檔的任意時刻停止解析。
通過該圖我們可以大概了解解析的過程。
private void parse(String xmlString,List infos){
// SAXParserFactory 是一個使用工廠模式的類
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
try {
XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
reader.setContentHandler(new Mp3ListContentHandler(infos));
reader.parse(new InputSource(new StringReader(xmlString)));
}catch (Exception e) {
e.printStackTrace();
}
}
使用SAX解析XML文件,首先要得到一個SAXParserFactory對象,然後得到一個XMLreader對象,再將自己實現的Contenthandler接口的類對象傳遞給XMLreader的setContenthandler方法,最後調用XMLreader的parse方法,將需要解析的XML文件生成Inputsource放入即可。
解析XML文件的關鍵在於自己實現Contenthandler這一接口的類,在這個類中,可以按照我們的需求來解析XML文件,將不同標簽下的內容按照自己的需要使用、存儲。
/**
* XML解析類,通過繼承DefualtHandler,並復寫該類中的方法解析XML文件
* 這裡采用的是SAX解析方式,同時沒有選擇實現接口,而是通過adapt模式,繼承一個實現了ContentHandler接口的類
* @author 龍凱
*
*/
public class Mp3ListContentHandler extends DefaultHandler {
private List infos = null;
private Mp3Info mp3Info = null;
private String tagname = null;
public Mp3ListContentHandler(List infos) {
super();
this.infos = infos;
}
/*
* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
* 處理文件內容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String info = new String (ch,start,length);
if (tagname.equals("id")) {
mp3Info.setId(info);
}
else if(tagname.equals("mp3.name")) {
mp3Info.setMp3name(info);
}
else if (tagname.equals("mp3.size")) {
mp3Info.setMa3size(info);
}
else if (tagname.equals("lrc.name")) {
mp3Info.setLrcname(info);
}
else if (tagname.equals("lrc.size")) {
mp3Info.setLrcsize(info);
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//如果結束標簽名為設定標簽名,實現特定的方法
if (localName.equals("resource")) {
infos.add(mp3Info);
}
tagname = "";
}
@Override
public void startDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 每次新解析到一個標簽時,識別標簽名,根據不同的標簽名,調用不同的方法
this.tagname = localName;
if (tagname.equals("resource")) {
mp3Info = new Mp3Info();
}
}
}
通過這個類,主要實現的是解析一個Mp3resource.XML文件,通過該文件讀出mp3文件的名字,大小,id,以及歌詞lrc文件的名字大小,存儲在一個list的list中。下面是XML文件:
0001
a1.mp3
10033011
a1.lrc
9053
0002
a2.mp3
10033011
a2.lrc
9053
本文實例講述了Android編程使用ListView實現數據列表顯示的方法。分享給大家供大家參考,具體如下:要將數據庫中的數據列表顯示在屏幕上,我們要使用ListView
環境說明: Android Studio 2.0 V7包版本:com.android.support:appcompat-v7:23.4.0 compileSdkV
最近項目做完了,有閒暇時間,一直想做一個類似微信中微信發說說,既能實現拍照,選圖庫,多圖案上傳的案例,目前好多App都有類似微信朋友圈的功能,能過發表說說等附帶圖片上傳。
寫在前面筆者近來在學習Android自定義View,收集了一些不算復雜但又“長得”還可以的自定義View效果實現,之前分享過兩個效果:一個水平的進