2 netboynew netboynew 于 2016.12.31 21:19 提问

android pull 解析XML ,出错求解!

package com.example.administrator.xml;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.widget.Toast;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button_pullXml).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          ArrayList<Person> list =  pullXml();
            for (int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }

        }
        private ArrayList<Person>  pullXml() {
            ArrayList<Person> list = new ArrayList<Person>();
            Person person = null;
          //  创建XML解析器
            XmlPullParser pullParser = Xml.newPullParser();
            //创建解析器输入流
            InputStream in = getResources().openRawResource(R.raw.person);
            try {
                pullParser.setInput(in,"UTF-8");
                int eventType = pullParser.getEventType();
                while (eventType != XmlPullParser.END_DOCUMENT){
                    switch (eventType){
                        case XmlPullParser.START_TAG:
                            String tag = pullParser.getName();
                            if("person".equals(tag)){
                                person = new Person();
                                person.setId(Integer.parseInt((pullParser.getAttributeValue(null,"id"))));
                            }else  if("name".equals(tag)){
                                person.setName(pullParser.nextText());
                            }else  if("age".equals(tag)){
                                person.setAge(Integer.parseInt(pullParser.nextText()));
                            }else if("sex".equals(tag)){
                                person.setSex(pullParser.nextText());
                            }else if("tel".equals(tag)){
                                person.setTel(pullParser.nextText());
                            }
                            break;
                        case XmlPullParser.END_TAG:
                            list.add(person);
                            break;
                    }
                    pullParser.next();
                }
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return list;
        }
    });
}

}

运行后,点击解析BUTTON,卡顿很久提示Xml文件无响应,请教是哪里出错了。

2个回答

sinat_37181010
sinat_37181010   2016.12.31 21:40

你可以关注下 ITIL先锋这个微信公众号 上面每天会更新IT行业最前沿资讯和各种类别的IT资料,感觉工作学习都比较有用

oyljerry
oyljerry   Ds   Rxr 2016.12.31 23:00

先看看你xml解析到哪一步了?是不是死循环了,或者XML太大解析很消耗性能

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android之PULL解析XML
今天我们一起通过一个小例子来学习一下使用PULL解析器解析XML文件。 (1)首先我们放一个文件名为beauties.xml的XML文件到assets目录下,文件内容如下: 范冰冰 28 杨幂 23 然后在src目录下写一个与XML中
Android studio 下的 XML pull解析
Android原生系统的XML解析就是用的pull解析。由此我们可以得出两个信号: 1、pull解析肯定有独特的优势,能从dom、sax解析中脱颖而出。 2、我们在使用pull解析时不需要导入额外的第三方jar包,直接使用。
android之Xml的高效解析方式——pull
我们知道,解析XML在各个平台使用也非常广泛,android也是一样,经常会涉及到XML的解析读取,解析方式主要有三种:SAX解析器、DOM解析器和PULL解析器。 SAX解析器:它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的,也就是ContentHandler为重要核心,解析过程中每遇到一个事件源,只有调用事件解析器才能得到相应的处理;不过它的优点主要是解析速度快,占用内存少。
XML使用SAX解析与PULL解析的区别
XML使用SAX解析与PULL解析的区别在最近的应用中,经常会用到对XML的解析,但是一直有一个疑问就是SAX解析与PULL解析的区别到底是什么。搜索了相关的问题,整理如下,以便大家查询。我们知道,SAX解析是事件驱动的,它不会将整个文档读入内存再解析,而是在读取文档的过程中就解析它,所以,文档读入的过程也就是SAX解析的过程。虽然,SAX方式解析XML不会将整个文档放入内存,但它还是会遍历完毕文档
Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别
XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。 在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。 SAX解析器: SAX(Simple A
【Android】PULL解析XML文件
XML解析三种方式 DOM 通用性强,它会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据; 简单直观,但需要将文档读取到内存,并不太适合移动设备; SAX SAX是一个解析速度快并且占用内存少的xml解析器; 采用事件驱动,它并不需要解析整个文档; 实现:继承DefaultHandler,覆写startElement、endElement
Android使用Pull方式解析XML
简单介绍:在Android应用开发中Pull方式解析XML是最被推荐的一种,Android系统内置了Pull解析器用来解析XML文件,它是采用事件驱动来完成XML解析的,只需要处理开始和结束事件,通常使用switch语句根据事件的类型匹配不同的处理方式。最常使用的事件类型: 1. START_DOCUMENT:开始解析(只执行一次) 2. START_TAG:开始元素 3. TEXT:解析文本
android pull解析xml最简单的方法
android pull解析xml最简单的方法
Android开发8——利用pull解析器读写XML文件
一、基本介绍 对XML解析有SAX和DOM等多种方式,Android中极力推荐xmlpull方式解析xml。xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar。   jar包下载网址 http://www.xmlpull.org/ htt
android xml使用pull解析
xml的三种解析方式,DOM,SAX,和Pull