編輯:關於Android編程
在上一篇文章寫了SAX解析XML,感覺Pull方式和SAX方式非常相似,只是SAX需要一個輔助的類,解析時觸發事件後在回調方法裡面寫代碼,而Pull則通過調用事件類型的方法來返回一個int值,然後根據這個值來寫代碼。
首先自定義一個XML文件:Student.xml,注意是新建file而不是xml。
張三 男 18李四 女 19王五 男 20
以解析第一項數據為例:
張三 男 18
整個流程是:int event = parser.getEventType()產生一個XmlPullParser.START_DOCUMENT:實例化List → event = parser.next()觸發下一個事件,產生XmlPullParser.START_TAG,元素名為student,實例化student,將元素屬性賦給相應字段 → event = parser.next()觸發下一個事件,產生XmlPullParser.START_TAG,元素名為name,將文本信息賦給相應字段 → event = parser.next()觸發下一個事件,產生XmlPullParser.END_TAG,沒做什麼反應 → ...... → 最後是XmlPullParser.END_TAG,元素名為student,將student這個對象存放在list中,將其置為null。最後在activity裡面通過一個Button來解析數據,其中用到幾個類。
package com.example.xml_sax_demo_1; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.util.Xml; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub try { readXML(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } private void readXML() throws Exception { Student student = null;Listlist = null; XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance(); XmlPullParser parser = xmlPullParserFactory.newPullParser(); //實例化XmlPullParser InputStream stream = this.getClass().getClassLoader() .getResourceAsStream("Student.xml"); // 獲得輸入流 parser.setInput(stream, "UTF-8"); //兩個參數輸入流,編碼格式 int event = parser.getEventType();// 產生第一個事件 while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: list = new ArrayList (); //文檔開始實例化list break; case XmlPullParser.START_TAG: if ("student".equals(parser.getName())) { student = new Student(); student.setId(Integer.parseInt(parser.getAttributeValue(0))); } if (student != null) { if ("name".equals(parser.getName())) { student.setName(parser.nextText()); } else if ("sex".equals(parser.getName())) { student.setSex(parser.nextText()); } else if ("age".equals(parser.getName())) { student.setAge(Integer.parseInt(parser.nextText())); } } break; case XmlPullParser.END_TAG: if ("student".equals(parser.getName())) { list.add(student); student = null; } break; } event = parser.next();// 進入下一個元素並觸發相應事件 } for (Student stu : list) { System.out.println(stu.toString()); } } } 結果:
小結:XmlPullParser類幾個比較重要的常量:START_DOCUMENT、END_DOCUMENT、START_TAG、END_TAG,其實還有一個Text。幾個重要的方法getName(),獲取元素名;nextText(),獲取下一個文本信息;next(),讀取下一個解析狀態。
有些時候我們只想要好好的休息可是在某些時刻我們登錄的微信老是響個不停,尤其是一些群聊,一直刷刷刷,自己又沒時間去看,下面小編就為大家分享一下怎麼設置微信消息
前面寫過一篇關於下拉刷新控件的文章下拉刷新控件終結者:PullToRefreshLayout,後來看到好多人還
※效果 ※使用方法 package com.fancyy.calendarweight; import java.u
本博文是《第一行代碼 Android》的讀書筆記/摘錄。一、Content Provider簡介內容提供器(Content Provider)主要用於在不同的應用程序之間