編輯:關於Android編程
在解析XML文件的過程中,發現API文檔中對於解析事件描述的不夠詳盡,給解析XML文件帶來了不少的困擾,今天做了個事件類型分析的demo和大家分享一下。
第一步:新建一個Android工程文件,其他都不用改,只要在onCreate()方法中寫一個xmlTest()方法即可,代碼如下:
[java]
package com.example.xmltest;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xmlTest();
}
/**
* 測試Pull解析方式中的事件類型
*/
private void xmlTest() {
//定義事件類型
int eventType = 0;
try {
XmlResourceParser xrp = getResources().getXml(R.xml.timezones);
// 獲取到xml文件時,XmlResourceParser的是指向文檔開始處
eventType = xrp.getEventType();
// System.out.println("-------->"+eventType);//查看事件的數值
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
System.out.println("Start document");
break;
case XmlPullParser.START_TAG:
System.out.println("Start tag " + xrp.getName());
break;
case XmlPullParser.TEXT:
System.out.println("Text " + xrp.getText());
break;
case XmlPullParser.END_TAG:
System.out.println("End tag " + xrp.getName());
break;
default:
break;
}
eventType = xrp.next();
//System.out.println("-------->"+eventType);//查看事件的數值
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//判斷事件類型是不是文檔結束
if (eventType == XmlPullParser.END_DOCUMENT) {
System.out.println("End document");
}
}
}
package com.example.xmltest;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xmlTest();
}
/**
* 測試Pull解析方式中的事件類型
*/
private void xmlTest() {
//定義事件類型
int eventType = 0;
try {
XmlResourceParser xrp = getResources().getXml(R.xml.timezones);
// 獲取到xml文件時,XmlResourceParser的是指向文檔開始處
eventType = xrp.getEventType();
// System.out.println("-------->"+eventType);//查看事件的數值
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
System.out.println("Start document");
break;
case XmlPullParser.START_TAG:
System.out.println("Start tag " + xrp.getName());
break;
case XmlPullParser.TEXT:
System.out.println("Text " + xrp.getText());
break;
case XmlPullParser.END_TAG:
System.out.println("End tag " + xrp.getName());
break;
default:
break;
}
eventType = xrp.next();
//System.out.println("-------->"+eventType);//查看事件的數值
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//判斷事件類型是不是文檔結束
if (eventType == XmlPullParser.END_DOCUMENT) {
System.out.println("End document");
}
}
}
第二步:上面的代碼中用到了一個timezones.xml文件,代碼如下,只需將下面代碼復制到Android工程文件-->res-->xml文件夾下即可:[html] view plaincopyprint?<?xml version="1.0" encoding="utf-8"?>
<timezones>
<timezone id="Pacific/Majuro">馬朱羅</timezone>
<timezone id="Pacific/Midway">中途島</timezone>
</timezones>
<?xml version="1.0" encoding="utf-8"?>
<timezones>
<timezone id="Pacific/Majuro">馬朱羅</timezone>
<timezone id="Pacific/Midway">中途島</timezone>
</timezones>第三部 :在模擬器上運行程序,在LogCat上可以看到如下信息:
我們對打印結果做分析如下:
1.可以看到Start document打印了兩次,說明當程序實例化XmlResourceParser這個對象後,Pull解析器默認的事件是XmlPullParser.START_DOCUMENT,當執行一次XmlResourceParser.next()後,事件仍然指向XmlPullParser.START_DOCUMENT。
2.之後再執行XmlResourceParser.next()則依次向下取一個事件。
3.常用的事件有:XmlPullParser.START_DOCUMENT、XmlPullParser.START_TAG、XmlPullParser.TEXTXmlPullParser.END_TAG、XmlPullParser.END_DOCUMENT。
之前在eclipse上進行開發的時候,要去除Activity的的默認標題欄,我習慣使用的方法是用下面這行代碼:requestWindowFeature(Window.FE
在上一篇文章-安卓開發環境搭建中,我們創建並啟動了eclipse自帶的安卓模擬器,該模擬器不僅啟動慢,而且在使用過程中的反應速度也是出奇的差,經常出現卡機現象。為了解決這
如果說Android源碼中哪個地方裝飾模式應用的最明顯的話,那肯定是非ContextWrapper莫屬了,ContextWrapper是一個透明的經典的裝飾模式。本文將通
當數據庫的數據發生改變,我們又想知道具體改變的情況時,就需要對數據庫的變化情況做一個監控。這個任務,就由內容觀察者來完成。下面這個案例,為短信數據庫注冊內容觀察者,來監控