PULL解析

package com.example.httpclient_get_xml;

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

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.example.adapter.MyAdapter;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {

    private ListView lv_listview;
    private List<Movies> movielist;
    private Movies movies;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        // 获取对象
        lv_listview = (ListView) super.findViewById(R.id.lv_listview);
        // 开启子线程
        new Thread() {
            public void run() {
                /**
                 * http://v.juhe.cn/boxoffice/rank.php?key=
                 * d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml
                 */
                try {
                    //使用HttpClient的GET方法获取接口
                    HttpClient client = new DefaultHttpClient();
                    HttpGet httpget = new HttpGet(
                            "http://v.juhe.cn/boxoffice/rank.php?key=d3d0f65864bcc5f7d750284912e2baf5&area=CN&dtype=xml");
                    HttpResponse response = client.execute(httpget);
                    //判断返回值是否为200
                    if (response.getStatusLine().getStatusCode() == 200) {
                        InputStream is = response.getEntity().getContent();
                        //调用Pull解析方法
                        movielist = XML_pull(is);
                        //向Handler传值
                        Message msg = handler.obtainMessage(1, movielist);
                        handler.sendMessage(msg);
                    }

                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            };
        }.start();
    }

    // XML解析方法 解析后返回List<Movies>对象
    public List<Movies> XML_pull(InputStream is) {
        try {
            XmlPullParserFactory pullParserFactory = XmlPullParserFactory
                    .newInstance();
            // 获取XmlPullParser的实例
            //XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
            XmlPullParser xmlPullParser = Xml.newPullParser();
            xmlPullParser.setInput(is, "UTF-8");
            int flg = xmlPullParser.getEventType();

            // 循环解析
            while (flg != XmlPullParser.END_DOCUMENT) {// 文档解析没有结束
                //获取标签名称
                String nodeName = xmlPullParser.getName();
                switch (flg) {
                case XmlPullParser.START_DOCUMENT:// 文档解析开始
                    //创建集合
                    movielist = new ArrayList<Movies>();
                    break;
                case XmlPullParser.START_TAG:// 标签解析开始
                    if("item".equals(nodeName)){
                        movies = new Movies();
                    }else if("rid".equals(nodeName)){
                        movies.setRid(Integer.parseInt(xmlPullParser.nextText()));
                    }else if("name".equals(nodeName)){
                        movies.setName(xmlPullParser.nextText());
                    }else if("wk".equals(nodeName)){
                        movies.setWk(xmlPullParser.nextText());
                    }else if("wboxoffice".equals(nodeName)){
                        movies.setWboxoffice(xmlPullParser.nextText());
                    }else if("tboxoffice".equals(nodeName)){
                        movies.setTboxoffice(xmlPullParser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:// 标签解析结束
                    if("item".equals(nodeName)){
                        movielist.add(movies);
                        movies=null;
                    }
                    break;
                }
                flg = xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return movielist;
    }

    // 创建Handler
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==1){
                //获取子线程传递的对象
                movielist = (List<Movies>) msg.obj;
                MyAdapter adapter = new MyAdapter(MainActivity.this, movielist);
                lv_listview.setAdapter(adapter);
            }
        }
    };
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值