第三方的httputils请求数据和xml的pull解析

来源:互联网 发布:mac如何卸载java 编辑:程序博客网 时间:2024/05/24 00:45
package com.bwei.test;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.InputSource;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.bwei.adapter.Myadapter;
import com.bwei.vo.Bean;
import com.bwei.xlistview.XListView;
import com.bwei.xlistview.XListView.IXListViewListener;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.lidroid.xutils.http.client.multipart.content.ByteArrayBody;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity implements IXListViewListener {
    String path = "http://www.oschina.net/action/api/tweet_list?uid=0&pageSize=10&pageIndex=";
    private List<Bean> list=new ArrayList<Bean>();
    private XListView lv;
    boolean flags=true;
    Handler hd=new Handler(){
        public void handleMessage(android.os.Message msg) {
            
            if(msg.what==1){
                adapter.lvDown(list);
            }else if(msg.what==2){
                adapter.lvUp(list);
            }
        };
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //寻找控件
        lv = (XListView) findViewById(R.id.xlistview);
        lv.setPullLoadEnable(true);
        lv.setPullRefreshEnable(true);
        lv.setXListViewListener(this);
        adapter = new Myadapter(list, MainActivity.this);
        lv.setAdapter(adapter);
        
        getData();
        
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                //进行跳转带值
                Intent intent=new Intent(MainActivity.this, Second.class);
                intent.putExtra("id", list.get(position-1).id);
                
                startActivity(intent);
            }
        });
        
        
        
    }

    // 请求数据
    public void getData() {
        // 采用第三方来请求数据
        HttpUtils utils = new HttpUtils();
        utils.send(HttpMethod.GET, path, new RequestCallBack<String>() {

            @Override
            public void onFailure(HttpException arg0, String arg1) {
                System.out.println("请求失败!");
            }

            @Override
            public void onSuccess(ResponseInfo<String> arg0) {
                // 返回的xml字符串
                String xml = arg0.result;
                // 放在流中以便pull解析
                InputStream is = new ByteArrayInputStream(xml.getBytes());
                // 在此调用解析的方法,将流装进去
                pullJiexi(is);
                //list里面已经装了所有数据
                if(flags==true){
                    hd.sendEmptyMessage(1);
                }else{
                    hd.sendEmptyMessage(2);
                }
            }
        });

    }

    // 解析的方法
    protected void pullJiexi(InputStream is) {
        try {
            Bean b = null;
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            // 得到流
            parser.setInput(is, "utf-8");
            // 得到其类型
            int type = parser.getEventType();
            // 进行判断
            while (type != XmlPullParser.END_DOCUMENT) {

                switch (type) {
                case XmlPullParser.START_DOCUMENT:
                    list = new ArrayList<Bean>();
                    break;
                case XmlPullParser.START_TAG:
                    //进行判断
                    if("tweet".equals(parser.getName())){
                        b=new Bean();
                    }else if("id".equals(parser.getName())){
                        b.setId(Integer.parseInt(parser.nextText()));
                    }else if("imgBig".equals(parser.getName())){
                        b.setImgBig(parser.nextText());
                    }
                    else if("portrait".equals(parser.getName())){
                        b.setPortrait(parser.nextText());
                    }else if("author".equals(parser.getName())){
                        b.setAuthor(parser.nextText());
                    }else if("body".equals(parser.getName())){
                        b.setBody(parser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if("tweet".equals(parser.getName())){
                        list.add(b);
                    }
                    break;
                case XmlPullParser.END_DOCUMENT:

                    break;

                }
                type=parser.next();
            }
            System.out.println("解析成功"+list.toString());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    public void onRefresh() {
        path=path+1;
        flags=true;
        getData();
        //关闭
        lv.stopLoadMore();
        lv.stopRefresh();
        
    }
    int i=1;
    private Myadapter adapter;
    @Override
    public void onLoadMore() {
        i++;
        path=path+i;
        flags=false;
        getData();
        lv.stopLoadMore();
        lv.stopRefresh();
    }

}

0 0