XmlPullParser

可能遇到的错误 :路径错误

  java.lang.IllegalArgumentException: is == null

没有设置setInput()

  org.xmlpull.v1.XmlPullParserException: setInput() must be called first.
(position:START_DOCUMENT [email protected]:1)

之所以程序写成下面这样,是因为4.0以后,不允许在主线程进行其他处理。否则会出现输入流异常

MainActivity.java

public class MainActivity extends Activity {

  MyHandler myHandler;
  private ListView
listView;
  @Override
  protected void onCreate(Bundle
savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView
= (ListView) findViewById(R.id.listView);
    myHandler = new
MyHandler();
    MyThread mythread = new MyThread();
    new
Thread(mythread).start();
  }

  class MyHandler extends Handler{
    @Override
    public void
handleMessage(Message msg) {
    super.handleMessage(msg);
    Bundle b =
msg.getData();
    List list =
b.getParcelableArrayList("list");
    List<Map<String,String>>
listItem = (List<Map<String, String>>)
list.get(0);
    SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,
listItem, R.layout.item, new String[]{"name","age"}, new
int[]{R.id.name,R.id.age});
    listView.setAdapter(adapter);
    }
  }

  class MyThread implements Runnable{
    List<Person>
list;
    List<Map<String,String>> listItem = new
ArrayList<Map<String,String>>();
    Map<String,String>
item =null;
    ArrayList array = new
ArrayList();
    @Override
    public void run() {
      PersonService
service = new PersonService();
      try {
        list =
service.getFile();
        if(list!=null){
        for(Person p
:list){
        item = new
HashMap<String,String>();
        item.put("id",
p.getId());
        item.put("name", p.getName());
        item.put("age",
p.getAge());
        listItem.add(item);
      }
    }else{
      Toast.makeText(MainActivity.this,
"没有解析出",
Toast.LENGTH_SHORT).show();
      return;
    }
    array.add(listItem);
    Message
msg = new Message();
    Bundle b = new
Bundle();
    b.putParcelableArrayList("list",
array);
    msg.setData(b);
    MainActivity.this.myHandler.sendMessage(msg);
    }
catch (IOException e) {
      Toast.makeText(MainActivity.this, "文件错误",
Toast.LENGTH_SHORT).show();
    } catch (XmlPullParserException e)
{
      Toast.makeText(MainActivity.this, "解析错误",
Toast.LENGTH_SHORT).show();
    }
  }

 }
}

 PersonService.java

public class PersonService {

  public List<Person> getFile() throws IOException,
XmlPullParserException{
  InputStream input =
this.getClass().getClassLoader().getResourceAsStream("person.xml");
  return
parseXML(input);
}

public static List<Person>
parseXML(InputStream input) throws XmlPullParserException,
IOException{
  List<Person> list = null;
  Person person =
null;
  XmlPullParser parser =
XmlPullParserFactory.newInstance().newPullParser();
  int eventType =
parser.getEventType();
  parser.setInput(input, "UTF-8");

  while(eventType != XmlPullParser.END_DOCUMENT){
  switch (eventType)
{
    case XmlPullParser.START_DOCUMENT:
      list = new
ArrayList<Person>();
    break;
    case
XmlPullParser.START_TAG:
      if(parser.getName().equals("person")){
        person
= new Person();
        String id =
parser.getAttributeValue(0);
        person.setId(id);
      }
      if(person!=null){
      if(parser.getName().equals("name")){
        String
name =
parser.nextText();
        person.setName(name);
      }
      if(parser.getName().equals("age")){
        String
age =
parser.nextText();
        person.setAge(age);
      }
    }
    break;
    case
XmlPullParser.END_TAG:
      if(parser.getName().equals("person")){
        list.add(person);
        person
= null;
      }
    break;
    }
    eventType =
parser.next();
  }
  return list;
}
}

person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>

<person id="12">
<name>java</name>

<age>85</age>
</person>
<person
id="15">
<name>Action</name>

<age>39</age>
</person>

</persons>

时间: 2024-10-18 07:23:18

XmlPullParser的相关文章

android XMLPullParser读取xml文件

由于刚学Android,用的开发工具是Android studio,没用过eclipse的那个开发Android,所以针对有些说由于2个IDE的路径不通导致的文件读取不到,不做分析(实际上是没法分析eclipse里的),这个博文只针对AS用户. 我们的资源文件,除了放到res目录下之外,还可以放在跟java .res同级的asserts(新建的)目录里. 今天要解析的这个xml就是在这个目录下的. 首先说一下xmlpullparser,这个pull解析是基于事件的模式.比如 读取到xml的开始声

XmlPullParser(安卓推荐)

添加xml文件XmlPullParser package com.it.heima.review; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.OutputStream; import org.xmlpull.v1.XmlSerializer; import android.R.xml; import android.os.Bu

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

请帮忙用android的XmlPullParser解析xml中的节点

============问题描述============ 怎么解析Version和COMPANY的值? <TASKREPLY> <MESSAGE Type="0" > <DATA Version="1"  COMPANY="2"/> </MESSAGE> </TASKREPLY> ============解决方案1============ XmlPullParser parser: St

使用XmlPullParser对xml进行读取

XML文件是一种标记性语言;在开发中经常在接口交互时被用作报文传输或者把自定义的类序列化为XML的形式存储到数据库.正因为XML文件这么常用,使用JAVA对XML文件进行读写操作是每一个开发人员必须掌握的技能点,下面总结一下个人用JAVA对XML文件的读写操作. JAVA在XML解释器方面的包比较多,有基于DOM解释的DOM4j.推模式的SAX及拉模式的STAX.粗略介绍下这几种方式的特点,具体理论知识最好网上搜索一下进行了解. * 1) 解释DOM : 每次都会把xml的具体内容加载到内存,操

XmlPullParser 解析xml文件

1 public static List<Person> getPersons(InputStream xml) throws Exception{ 2 List<Person> persons = null; 3 Person person = null; 4 XmlPullParser pullParser = Xml.newPullParser(); 5 pullParser.setInput(xml, "UTF-8");//为Pull解析器设置要解析的X

Android学习笔记(三八):资源resource(上)、XML解析(XmlPullParser)

resource是java源代码之外的静态信息.例如layout.resource作为文件存放在res/目录下面,除了res/raw/外,Android会自动解析,例如layout文件,我们不需要自己去解析XML封装.我们之前用过res/layout/,以及res/anim/之前已经用过. Image:文件存放在res/drawable/,存放应用的icon. Raw:res/raw/,程序所需的任意格式的文件,但是系统不会对其进行解析,也既Adroid Framework并不需要的. Stri

Android基础--XML解析(XmlPullParser )

1.要解析的xml文件如下 <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <weather> <city> <name>深圳</name> <temp>18°</temp> <pm25>30</pm25> </city> <city> <name>上海</name> <temp&

Java微信开发_Exception_01_The type org.xmlpull.v1.XmlPullParser cannot be resolved. It is indirectly referenced from required .class files

一.源码: package com.souvc.weixin.util; import java.io.InputStream; import java.io.Writer; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document; import org.dom4j.E

java.lang.IllegalArgumentException: already added: Lorg/xmlpull/v1/XmlPullParser

在我的Eclipse Android app中出现了如下的错误 UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Lorg/xmlpull/v1/XmlPullParser; .... Conversion to Dalvik format failed with error 1 此错误值出现在当我添加一个外部的jar文件到我的项目中时,我搜索了很多,没有找到一个有效的解决方法,我