本篇內(nèi)容主要講解“Android XML當中的Pull方式是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Android XML當中的Pull方式是什么”吧!
覃塘ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
提醒大家Android系統(tǒng)還提供了另一種XML解析方式可以使你更好的處理這種情況,就是Pull方式解析XML數(shù)據(jù)。
Pull解析器和SAX解析器雖有區(qū)別但也有相似性。他們的區(qū)別為:SAX解析器的工作方式是自動將事件推入注冊的事件處理器進行處理,因此你不能控制事件的處理主動結(jié)束;而Pull解析器的工作方式為允許你的應(yīng)用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結(jié)束解析。這是他們主要的區(qū)別。
而他們的相似性在運行方式上,Pull解析器也提供了類似SAX的事件(開始文檔START_DOCUMENT和結(jié)束文檔END_DOCUMENT,開始元素START_TAG和結(jié)束元素END_TAG,遇到元素內(nèi)容TEXT等),但需要調(diào)用next() 方法提取它們(主動提取事件)。
Android系統(tǒng)中和Pull方式相關(guān)的包為org.xmlpull.v1,在這個包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實例調(diào)用newPullParser方法創(chuàng)建 XmlPullParser解析器實例,接著XmlPullParser實例就可以調(diào)用getEventType()和next()等方法依次主動提取事 件,并根據(jù)提取的事件類型進行相應(yīng)的邏輯處理。
下面我們就用上面介紹的Pull方式來實現(xiàn)解析XML形式的USGS地震數(shù)據(jù)的Demo例子。
程序首先也是定義解析用到的變量,在定義的用于解析xml數(shù)據(jù)的方法中
public ArrayList
定義了一個局部變量
boolean isDone = false;
用于標志在有滿足條件時停止讀取XML文檔,退出解析過程。
主體部分首先創(chuàng)建XmlPullParser。
我們來看看代碼:
//創(chuàng)建XmlPullParser,有兩種方式 //方式一:使用工廠類XmlPullParserFactory XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = pullFactory.newPullParser(); //方式二:使用Android提供的實用工具類android.util.Xml XmlPullParser xmlPullParser = Xml.newPullParser();
創(chuàng)建XmlPullParser有兩種方式,一種是使用我們介紹的org.xmlpull.v1包中的工廠類XmlPullParserFactory。除了這種方式外,還可以使用android sdk提供的實用工具包android.util中的類Xml的newPullParser()方法直接創(chuàng)建。
接著為pull解析器設(shè)置要解析的xml文檔數(shù)據(jù),并使用主動的方式獲取解析器中的事件.
xmlPullParser.setInput(inStream, "UTF-8"); int eventType = xmlPullParser.getEventType();
我們***添加AndroidXMLDemoPull.java文件中的內(nèi)容
public class AndroidXMLDemoPull extends Activity { /** Called when the activity is first created. */ //定義顯示的List相關(guān)變量 ListView list; ArrayAdapteradapter; ArrayList earthquakeEntryList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //獲取地震數(shù)據(jù)流 InputStream earthquakeStream = readEarthquakeDataFromFile(); //Pull方式進行xml解析 PullEarthquakeHandler pullHandler = new PullEarthquakeHandler(); earthquakeEntryList = pullHandler.parse(earthquakeStream); //用ListView進行顯示 list = (ListView)this.findViewById(R.id.list); adapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, earthquakeEntryList); list.setAdapter(adapter); } private InputStream readEarthquakeDataFromFile() { //從本地獲取地震數(shù)據(jù) InputStream inStream = null; try { inStream = this.getAssets().open("USGS_Earthquake_1M2_5.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return inStream; } private InputStream readEarthquakeDataFromInternet() { //從網(wǎng)絡(luò)上獲取實時地震數(shù)據(jù) URL infoUrl = null; InputStream inStream = null; try { infoUrl = new URL("http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml"); URLConnection connection = infoUrl.openConnection(); HttpURLConnection httpConnection = (HttpURLConnection)connection; int responseCode = httpConnection.getResponseCode(); if(responseCode == HttpURLConnection.HTTP_OK) { inStream = httpConnection.getInputStream(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return inStream; } }
只是把進行XML解析的部分換成了如下方式:
//Pull方式進行xml解析 PullEarthquakeHandler pullHandler = new PullEarthquakeHandler(); earthquakeEntryList = pullHandler.parse(earthquakeStream);
到此,相信大家對“Android XML當中的Pull方式是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!