成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android XML當中的Pull方式

移動開發 Android
Pull解析器和SAX解析器雖有區別但也有相似性。他們的區別為:SAX解析器的工作方式是自動將事件推入注冊的事件處理器進行處理,因此你不能控制事件的處理主動結束;而Pull解析器的工作方式為允許你的應用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結束解析。這是他們主要的區別。

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

Pull解析器和SAX解析器雖有區別但也有相似性。他們的區別為:SAX解析器的工作方式是自動將事件推入注冊的事件處理器進行處理,因此你不能控制事件的處理主動結束;而Pull解析器的工作方式為允許你的應用程序代碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件后不再獲取事件,結束解析。這是他們主要的區別。

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

Android系統中和Pull方式相關的包為org.xmlpull.v1,在這個包中提供了Pull解析器的工廠類XmlPullParserFactory和Pull解析器XmlPullParser,XmlPullParserFactory實例調用newPullParser方法創建 XmlPullParser解析器實例,接著XmlPullParser實例就可以調用getEventType()和next()等方法依次主動提取事 件,并根據提取的事件類型進行相應的邏輯處理。

下面我們就用上面介紹的Pull方式來實現解析XML形式的USGS地震數據的Demo例子。

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

public ArrayList<EarthquakeEntry> parse(InputStream inStream)

定義了一個局部變量

boolean isDone = false;

用于標志在有滿足條件時停止讀取XML文檔,退出解析過程。

主體部分首先創建XmlPullParser。

 

我們來看看代碼:

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

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

接著為pull解析器設置要解析的xml文檔數據,并使用主動的方式獲取解析器中的事件.

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

我們***添加AndroidXMLDemoPull.java文件中的內容

  1. public class AndroidXMLDemoPull extends Activity { 
  2. /** Called when the activity is first created. */ 
  3. //定義顯示的List相關變量 
  4. ListView list; 
  5. ArrayAdapter<EarthquakeEntry> adapter; 
  6. ArrayList<EarthquakeEntry> earthquakeEntryList; 
  7. @Override 
  8. public void onCreate(Bundle savedInstanceState) { 
  9. super.onCreate(savedInstanceState); 
  10. setContentView(R.layout.main); 
  11. //獲取地震數據流 
  12. InputStream earthquakeStream = readEarthquakeDataFromFile(); 
  13. //Pull方式進行xml解析 
  14. PullEarthquakeHandler pullHandler = new PullEarthquakeHandler(); 
  15. earthquakeEntryList = pullHandler.parse(earthquakeStream); 
  16. //用ListView進行顯示 
  17. list = (ListView)this.findViewById(R.id.list); 
  18. adapter = new ArrayAdapter<EarthquakeEntry>(this, android.R.layout.simple_list_item_1, earthquakeEntryList); 
  19. list.setAdapter(adapter); 
  20. private InputStream readEarthquakeDataFromFile() 
  21. //從本地獲取地震數據 
  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. //從網絡上獲取實時地震數據 
  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; 

只是把進行XML解析的部分換成了如下方式:

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

 

責任編輯:閆佳明 來源: my.eoe.cn
相關推薦

2013-06-08 11:04:18

Android開發Pull解析XMLAndroid XML

2010-08-06 09:38:11

Flex讀取XML

2016-02-16 10:26:58

PythonXML方式

2022-11-21 08:11:18

2010-08-23 17:02:12

DHCP路由

2013-06-08 13:18:50

Android開發XML構造技巧XML解析

2014-12-31 14:09:23

xml解析

2013-06-08 13:02:11

Android開發XML解析

2015-07-30 14:12:14

設計ui心理

2010-06-08 16:31:16

LIN總線協議

2010-08-31 17:30:51

DHCP服務

2009-09-09 14:40:15

C# XML解析

2011-05-18 14:52:04

XML

2017-06-30 08:51:12

組件模板勒索軟件項目管理

2022-09-13 09:31:59

Python內置函數lambda

2013-06-09 10:04:35

Android開發XML讀寫XML解析

2013-06-09 12:49:15

Android開發XML讀寫XML解析

2013-06-09 12:53:05

Android開發XML讀寫XML解析

2013-06-09 13:07:23

Android開發XML讀寫XML解析

2013-06-09 10:18:29

Android開發XML讀寫XML解析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精产国品一二三产区视频 | 午夜精品一区 | 少妇久久久久 | 中文字幕在线观看日韩 | 国产精品日女人 | 美女视频网站久久 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 美女黄18岁以下禁止观看 | 欧美激情亚洲激情 | 亚洲国产精品一区二区三区 | 精品久久电影 | 国产在线一区二区 | 精品日韩 | 日本精品一区二区三区视频 | 九九热这里 | 日韩精品无码一区二区三区 | 国产精品91视频 | 国产在线二区 | 中文字幕高清av | 国产一区二区精品在线观看 | 国产欧美一区二区三区久久 | 男人天堂视频在线观看 | 国产精品亚洲视频 | 99久久99热这里只有精品 | 国产 日韩 欧美 制服 另类 | 一级黄色片美国 | 中文字幕亚洲精品在线观看 | 成人在线亚洲 | 黄色片网此 | 亚洲欧美日韩在线不卡 | 久久久精彩视频 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 免费国产视频在线观看 | 国产精品极品美女在线观看免费 | 国产精品久久久久久久久久久久午夜片 | 国内精品久久久久久 | 精品粉嫩超白一线天av | 天堂国产 | 伊人爽 | 99re66在线观看精品热 | 日本在线观看网址 |