編輯:關於Android編程
Android下使用Pull解析器 1,Pull解析器的運行方式與SAX解析器相似。它提供了類似的事件,如:開始元素和結束元素事件。 2,使用parser.next()可以進入下一個元素並觸發相應事件。 3,事件將作為一個int數值被發送,因此可以使用一個switch對相應的事件進行處理。 4,當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值。 5,相關API: 獲得當前節點事件類型:parser.getEventType(); 獲得下一節點事件類型:parser.next(); 獲得標簽屬性值: parser.getAttributeValue(); 獲得標簽後面文本內容:parser.nextText(); 例子:// 使用Pull解析器生成XML文件,並寫到本地 private void writeXmlToLocal() { List allen 36james 25personList = getPersonList(); // 獲得序列化對象 XmlSerializer serializer = Xml.newSerializer(); // XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer(); try { File path = new File(Environment.getExternalStorageDirectory(), "persons.xml"); FileOutputStream fos = new FileOutputStream(path); // 指定序列化對象輸出的位置和編碼 serializer.setOutput(fos, "utf-8"); // 寫開始 serializer.startDocument("utf-8", true); serializer.startTag(null, "persons"); // for (Person person : personList) { // 開始寫person serializer.startTag(null, "person"); // serializer.endDocument(); // 結束 } catch (Exception e) { e.printStackTrace(); } } // 使用Pull解析器讀取本地的XML文件 private Listserializer.attribute(null, "id", String.valueOf(person.getId())); // 寫person的name serializer.startTag(null, "name"); // } serializer.endTag(null, "persons"); //serializer.text(person.getName()); serializer.endTag(null, "name"); // // 寫person的age serializer.startTag(null, "age"); // serializer.text(String.valueOf(person.getAge())); serializer.endTag(null, "age"); // serializer.endTag(null, "person"); //parserXmlFromLocal() { try { File path = new File(Environment.getExternalStorageDirectory(), "persons.xml"); FileInputStream fis = new FileInputStream(path); // 獲得pull解析器對象 XmlPullParser parser = Xml.newPullParser(); // XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); // 指定解析的文件和編碼格式 parser.setInput(fis, "utf-8"); // 獲得事件類型 int eventType = parser.getEventType(); List personList = null; Person person = null; String id; while(eventType != XmlPullParser.END_DOCUMENT) { // 獲得當前節點的名稱 String tagName = parser.getName(); switch (eventType) { case XmlPullParser.START_TAG: // 當前等於開始節點 if("persons".equals(tagName)) { // personList = new ArrayList if("person".equals(tagName)) { // 需要把上面設置好值的person對象添加到集合中 personList.add(person); } break; default: break; } // 獲得下一個事件類型 eventType = parser.next(); } return personList; } catch (Exception e) { e.printStackTrace(); } return null; } }(); } else if("person".equals(tagName)) { // person = new Person(); id = parser.getAttributeValue(null, "id"); person.setId(Integer.valueOf(id)); } else if("name".equals(tagName)) { // person.setName(parser.nextText()); } else if("age".equals(tagName)) { // person.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG: //
本節引言: 在上一節中我們對Android中的13種類型的Drawable的類型進行了講解,有沒有應用到自己的 項目當中呢?而本節我們來探討的是Bitmap(
提煉接口重構是從一個已存在的類中提煉接口,它可以從某個類中選擇方法,把選中的方法提取到一個單獨的接口中.操作步驟:? 菜單欄: Refactor —>
前言這篇文章沒有什麼可看性,主要是源碼注釋太多,推薦自己看源碼,更容易理解些,在這裡主要介紹,其運作流程,貼代碼片段。自定義View要重寫三個方法:onMeasure,o
android關閉日志 我們在開發時,經常會輸出各種日志來debug代碼。但是等到應用發布的apk運行時不希望它輸出日志。 關閉輸出日志Log.v()