Android中的Http通信之xml文件解析

package com.pt.http01;

import android.os.Handler;
import android.widget.TextView;

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

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by 韬 on 2016-05-14.
 */
public class XmlThread extends  Thread{

    private String url;
    private Handler handler;
    private TextView tv_result;

    public XmlThread(String url, Handler handler, TextView tv_result) {
        this.url = url;
        this.handler = handler;
        this.tv_result = tv_result;
    }

    @Override
    public void run() {
        try {
            //连接,并且得到XML文件的输入流
            URL connurl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) connurl.openConnection();
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(5000);
            InputStream in = conn.getInputStream();
            //得到Pull解析器
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(in,"UTF-8");
            //创建存储XML的集合
            final List<People> peoples  = new ArrayList<>();
            //得到标签的类型
            int eventType = parser.getEventType();
            People people = null;
            while(eventType != XmlPullParser.END_DOCUMENT){
                //得到标签的名字
                String data = parser.getName();

                switch (eventType){
                    case XmlPullParser.START_TAG:
                        //people开始标签创建实例
                        if("people".equals(data)){
                            people = new People();
                        }
                        //属性name标签给实例设置属性
                        if("name".equals(data)){
                            people.setName(parser.nextText());
                        }
                        if("age".equals(data)){
                            people.setAge(Integer.parseInt(parser.nextText()));
                        }
                        if("school".equals(data)){
                            people.setSchool(parser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        //当为people字符串结束标签时,将实例添加进入集合
                        if("people".equals(data) && people != null){
                            peoples.add(people);
                        }
                        break;
                }
                //手动的调用时间处理的方法
                eventType = parser.next();
            }
            handler.post(new Runnable() {
                @Override
                public void run() {
                    tv_result.setText(peoples.toString());
                }
            });
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自270827204.iteye.com/blog/2298257
今日推荐