日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
AndroidXML當(dāng)中的Pull方式

提醒大家Android系統(tǒng)還提供了另一種XML解析方式可以使你更好的處理這種情況,就是Pull方式解析XML數(shù)據(jù)。

Pull解析器和SAX解析器雖有區(qū)別但也有相似性。他們的區(qū)別為:SAX解析器的工作方式是自動(dòng)將事件推入注冊(cè)的事件處理器進(jìn)行處理,因此你不能控制事件的處理主動(dòng)結(jié)束;而Pull解析器的工作方式為允許你的應(yīng)用程序代碼主動(dòng)從解析器中獲取事件,正因?yàn)槭侵鲃?dòng)獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結(jié)束解析。這是他們主要的區(qū)別。

而他們的相似性在運(yùn)行方式上,Pull解析器也提供了類似SAX的事件(開始文檔START_DOCUMENT和結(jié)束文檔END_DOCUMENT,開始元素START_TAG和結(jié)束元素END_TAG,遇到元素內(nèi)容TEXT等),但需要調(diào)用next() 方法提取它們(主動(dòng)提取事件)。

Android系統(tǒng)中和Pull方式相關(guān)的包為org.xmlpull.v1,在這個(gè)包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實(shí)例調(diào)用newPullParser方法創(chuàng)建 XmlPullParser解析器實(shí)例,接著XmlPullParser實(shí)例就可以調(diào)用getEventType()和next()等方法依次主動(dòng)提取事 件,并根據(jù)提取的事件類型進(jìn)行相應(yīng)的邏輯處理。

下面我們就用上面介紹的Pull方式來(lái)實(shí)現(xiàn)解析XML形式的USGS地震數(shù)據(jù)的Demo例子。

程序首先也是定義解析用到的變量,在定義的用于解析xml數(shù)據(jù)的方法中

public ArrayList parse(InputStream inStream)

定義了一個(gè)局部變量

boolean isDone = false;

用于標(biāo)志在有滿足條件時(shí)停止讀取XML文檔,退出解析過(guò)程。

主體部分首先創(chuàng)建XmlPullParser。

我們來(lái)看看代碼:

 
 
  1. //創(chuàng)建XmlPullParser,有兩種方式 
  2. //方式一:使用工廠類XmlPullParserFactory 
  3. XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance(); 
  4. XmlPullParser xmlPullParser = pullFactory.newPullParser(); 
  5. //方式二:使用Android提供的實(shí)用工具類android.util.Xml 
  6. XmlPullParser xmlPullParser = Xml.newPullParser(); 

創(chuàng)建XmlPullParser有兩種方式,一種是使用我們介紹的org.xmlpull.v1包中的工廠類XmlPullParserFactory。除了這種方式外,還可以使用android sdk提供的實(shí)用工具包android.util中的類Xml的newPullParser()方法直接創(chuàng)建。

接著為pull解析器設(shè)置要解析的xml文檔數(shù)據(jù),并使用主動(dòng)的方式獲取解析器中的事件.

 
 
  1. xmlPullParser.setInput(inStream, "UTF-8"); 
  2. int eventType = xmlPullParser.getEventType(); 

我們***添加AndroidXMLDemoPull.java文件中的內(nèi)容

 
 
  1. public class AndroidXMLDemoPull extends Activity { 
  2. /** Called when the activity is first created. */ 
  3. //定義顯示的List相關(guān)變量 
  4. ListView list; 
  5. ArrayAdapter adapter; 
  6. ArrayList earthquakeEntryList; 
  7. @Override 
  8. public void onCreate(Bundle savedInstanceState) { 
  9. super.onCreate(savedInstanceState); 
  10. setContentView(R.layout.main); 
  11. //獲取地震數(shù)據(jù)流 
  12. InputStream earthquakeStream = readEarthquakeDataFromFile(); 
  13. //Pull方式進(jìn)行xml解析 
  14. PullEarthquakeHandler pullHandler = new PullEarthquakeHandler(); 
  15. earthquakeEntryList = pullHandler.parse(earthquakeStream); 
  16. //用ListView進(jìn)行顯示 
  17. list = (ListView)this.findViewById(R.id.list); 
  18. adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, earthquakeEntryList); 
  19. list.setAdapter(adapter); 
  20. private InputStream readEarthquakeDataFromFile() 
  21. //從本地獲取地震數(shù)據(jù) 
  22. InputStream inStream = null; 
  23. try { 
  24. inStream = this.getAssets().open("USGS_Earthquake_1M2_5.xml"); 
  25. } catch (IOException e) { 
  26. // TODO Auto-generated catch block 
  27. e.printStackTrace(); 
  28. return inStream; 
  29. private InputStream readEarthquakeDataFromInternet() 
  30. //從網(wǎng)絡(luò)上獲取實(shí)時(shí)地震數(shù)據(jù) 
  31. URL infoUrl = null; 
  32. InputStream inStream = null; 
  33. try { 
  34. infoUrl = new URL("http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml"); 
  35. URLConnection connection = infoUrl.openConnection(); 
  36. HttpURLConnection httpConnection = (HttpURLConnection)connection; 
  37. int responseCode = httpConnection.getResponseCode(); 
  38. if(responseCode == HttpURLConnection.HTTP_OK) 
  39. inStream = httpConnection.getInputStream(); 
  40. } catch (MalformedURLException e) { 
  41. // TODO Auto-generated catch block 
  42. e.printStackTrace(); 
  43. } catch (IOException e) { 
  44. // TODO Auto-generated catch block 
  45. e.printStackTrace(); 
  46. return inStream; 

只是把進(jìn)行XML解析的部分換成了如下方式:

 
 
  1. //Pull方式進(jìn)行xml解析 
  2. PullEarthquakeHandler pullHandler = new PullEarthquakeHandler(); 
  3. earthquakeEntryList = pullHandler.parse(earthquakeStream); 

文章題目:AndroidXML當(dāng)中的Pull方式
當(dāng)前路徑:http://www.dlmjj.cn/article/djsoijs.html