編輯:關於Android編程
今天我們一起通過一個小例子來學習一下使用PULL解析器解析XML文件。
(1)首先我們放一個文件名為beauties.xml的XML文件到assets目錄下,文件內容如下:
范冰冰 28楊冪 23
package com.pulltest; public class Beauty { //美女姓名 private String name; //美女年齡 private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "美女資料 [年齡=" + age + ", 姓名=" + name + "]"; } }
package com.pulltest; import java.io.InputStream; import java.util.List; public interface IBeautyParser { /** * * 解析輸入流,獲取Beauty列表 * @param is * @return * @throws Exception */ public Listparse(InputStream is) throws Exception; /** * * 序列化Beauty對象集合,得到XML形式的字符串 * @param beauties * @return * @throws Exception */ public String serialize(List beauties) throws Exception; }
package com.pulltest; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; public class BeautyParserImpl implements IBeautyParser{ @Override public Listparse(InputStream is) throws Exception { List mList = null; Beauty beauty = null; // 由android.util.Xml創建一個XmlPullParser實例 XmlPullParser xpp = Xml.newPullParser(); // 設置輸入流 並指明編碼方式 xpp.setInput(is,"UTF-8"); // 產生第一個事件 int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT){ switch (eventType) { // 判斷當前事件是否為文檔開始事件 case XmlPullParser.START_DOCUMENT: mList = new ArrayList (); // 初始化books集合 break; // 判斷當前事件是否為標簽元素開始事件 case XmlPullParser.START_TAG: if (xpp.getName().equals("beauty")) { // 判斷開始標簽元素是否是book beauty = new Beauty(); } else if (xpp.getName().equals("name")) { eventType = xpp.next();//讓解析器指向name屬性的值 // 得到name標簽的屬性值,並設置beauty的name beauty.setName(xpp.getText()); } else if (xpp.getName().equals("age")) { // 判斷開始標簽元素是否是book eventType = xpp.next();//讓解析器指向age屬性的值 // 得到age標簽的屬性值,並設置beauty的age beauty.setAge(xpp.getText()); } break; // 判斷當前事件是否為標簽元素結束事件 case XmlPullParser.END_TAG: if (xpp.getName().equals("beauty")) { // 判斷結束標簽元素是否是book mList.add(beauty); // 將book添加到books集合 beauty = null; } break; } // 進入下一個元素並觸發相應事件 eventType = xpp.next(); } return mList; } @Override public String serialize(List beauties) throws Exception { // TODO Auto-generated method stub return null; } }
package com.pulltest; import java.io.InputStream; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import com.example.pulltest.R; public class PullTestActivity extends Activity{ //裝載Beauty類型的鏈表,其內容由XML文件解析得到 private ListbeautyList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pulltest); try { //通過assertmanager的open方法獲取到beauties.xml文件的輸入流 InputStream is = this.getAssets().open("beauties.xml"); //初始化自定義的實現類BeautyParserImpl BeautyParserImpl pbp = new BeautyParserImpl(); //調用pbp的parse()方法,將輸入流傳進去解析,返回的鏈表結果賦給beautyList beautyList = pbp.parse(is); } catch (Exception e) { e.printStackTrace(); } setupViews(); } /** * 將數據顯示到手機界面上 */ private void setupViews(){ String result = ""; for (Beauty b : beautyList) { result += b.toString(); } TextView textView = (TextView) findViewById(R.id.textView); textView.setText(result); } }
Android之PULL解析XML
一、問題:在Android啟動後會在新進程裡創建一個主線程,也叫UI線程(非線程安全)這個線程主要負責監聽屏幕點擊事件與界面繪制。當Application需要進行耗時操作
簡介這裡主要介紹Android生成一個Json格式的字符串,客戶端通過網絡獲取服務器端生成的Json字符串進行解析,根據解析出來的Url去網絡獲取圖片並顯示在ListVi
本文講的是自定義View的第二種方式-----創建復合控件創建復合(組合)可以很好的創建出具有重用功能的控件集合。這種方式通常需要繼承一個ViewGroup,再給它添加指
有時候你把手機接到電腦上調試時,Android Studio總是提示你重啟ADB,但是你點重啟後,立馬又跳出那個提示重啟的對話框。會再跳出提示對話框是因為你ADB重啟沒有