編輯:關於Android編程
這篇博客主要用來介紹對XML文件的操作:解析與生成。
Android手機內部的解析就是pull解析
官網:http://xmlpull.org/
所謂的解析,我們可以理解為:利用XML文件的內容來生成一個對象
導出生成的xml文件後不要對其格式化,否則會出異常
1、MainActivity
package com.example.xmlparsertest1; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
2、Person
package com.example.xmlparsertest1; public class Person { private Integer id; private String name; private Integer age; public Person() { // TODO Auto-generated constructor stub } public Person(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return Person [id= + id + , name= + name + , age= + age + ]; } }
3、PersonService
package com.example.xmlparsertest1; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; public class PersonService { /** * 解析XML文件 * @param in * @return * @throws Exception */ public ListloadPersons(InputStream in) throws Exception{ XmlPullParser parser = Xml.newPullParser();//獲取解析器 parser.setInput(in,UTF-8);//指定輸入流、碼表 ArrayList persons = new ArrayList (); Person p = null; /** * parser.getName():獲取標簽的名字 * parser.getAttributeValue(0): 獲取某個屬性的值 * parser.next(): 讓指針指向下一個標簽 * parser.nextText(): 獲取某個標簽的文本內容 */ for(int type = parser.getEventType() ; type != XmlPullParser.END_DOCUMENT ; type = parser.next()){ if(type == XmlPullParser.START_TAG){ if(parser.getName().equals(person)){ p = new Person(); String id = parser.getAttributeValue(0);//獲取該標簽的第0個屬性的值(value) // String id = parser.getAttributeValue(null, id);//這樣寫也行。第一個參數是命名空間,第二個參數是屬性的名字 p.setId(Integer.parseInt(id)); persons.add(p); }else if(parser.getName().equals(name)){ String name = parser.nextText(); p.setName(name); }else if(parser.getName().equals(age)){ String age = parser.nextText(); p.setAge(Integer.parseInt(age)); } } } return persons; } //生成XML文件 public void savePersons(List persons,OutputStream out)throws Exception{ XmlSerializer serializer = Xml.newSerializer(); serializer.setOutput(out,UTF-8); serializer.startDocument(UTF-8, true);//開始文檔 serializer.startTag(null, persons);//開始標簽 /** * serializer.startDocument(UTF-8, true);//開始文檔 * serializer.startTag(null, persons);//開始標簽 * serializer.attribute(null, id, p.getId().toString());//設置屬性 * serializer.text(p.getName());//設置標簽的文本內容 * serializer.endTag(null, persons); * serializer.endDocument(); */ for(Person p : persons){ serializer.startTag(null, person); serializer.attribute(null, id, p.getId().toString());//設置屬性 serializer.startTag(null, name); serializer.text(p.getName());//設置標簽的文本內容 serializer.endTag(null, name); serializer.startTag(null, age); serializer.text(p.getAge().toString()); serializer.endTag(null, age); serializer.endTag(null, person); } serializer.endTag(null, persons); serializer.endDocument(); } }
4、PersonServiceTest
package com.example.xmlparsertest1; import java.io.FileOutputStream; import java.io.InputStream; import java.util.List; import android.os.Environment; import android.test.AndroidTestCase; public class PersonServiceTest extends AndroidTestCase { public void testXMLParser() throws Exception{ PersonService service = new PersonService(); //獲取src目錄下的資源為輸入流方法 InputStream in = PersonServiceTest.class.getClassLoader().getResourceAsStream(persons_hjd.xml); Listpersons = service.loadPersons(in); for(Person p : persons){ System.out.println( -----------> + p); } // Person p = new Person(4, hjd, 22); // persons.add(p); // // service.savePersons(persons, new FileOutputStream(Environment.getExternalStorageDirectory() + / + persons_hjd.xml)); } }
以下附上需要解析的XML文件:persons.xml
范冰冰 31林志玲 38楊冪 26
Android中有個我們熟悉又陌生的對象Context(上下文),當我們啟動Activity的時候需要上下文,當我們使用dialog的時候我們需要上下文,但是上下文對象到
1,android本來就有獲取應用緩存的方法,只是用起來有點麻煩。但我們的應用有時需要讓用戶知道緩存的大小,讓用戶及時清理緩存。直接上代碼,demo使用android s
Android 中使用代碼動態布局 本文介紹在android中使用代碼動態布局,有時候根據不同的需求,比如需要根據服務器上的條目個數來決定app中頁面布局控件(
android開發中通過View的getDrawingCache方法可以達到截屏的目的,只是缺少狀態欄!原始界面截屏得到的圖片代碼實現1. 添加權限(AndroidMan