xml解析数据并上拉加载下拉刷新

来源:互联网 发布:有哪些php程序 编辑:程序博客网 时间:2024/05/27 09:45
public class MainActivity extends Activity implements IXListViewListener {

    private XListView xListview;
    private ArrayList<OsChina> mylist = new ArrayList<OsChina>();
    private int index = 0;
    private boolean isRefresh = false;
    private MyAdapter myAdapter;
    private OsChina oschina;

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

        xListview = (XListView) findViewById(R.id.xListview);
        xListview.setPullLoadEnable(true);
//        xListview.setPullRefreshEnable(true);
        xListview.setXListViewListener(this);
        // 请求数据的方法
        setData();
    }

    /**
     * 请求数据的方法
     */

    private void setData() {
        String path = "http://www.oschina.net/action/api/tweet_list?uid=0&pageIndex="
                + index + "&pageSize=20";
        HttpUtils http = new HttpUtils();
        http.send(HttpMethod.GET, path, new RequestCallBack<String>() {

            private List<OsChina> list;

            @Override
            public void onFailure(HttpException arg0, String arg1) {
                Toast.makeText(MainActivity.this, "数据请求失败", 0).show();
            }

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String result = responseInfo.result;
                byte[] bytes = result.getBytes();
                ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
                // 解析xml的方法
                list = pareXML(bais);
                if (isRefresh) {
                    System.out.println("isRefresh=======" + isRefresh);
                    mylist.clear();
                }
                mylist.addAll(list);
                if (myAdapter == null) {
                    myAdapter = new MyAdapter(MainActivity.this, mylist);
                    xListview.setAdapter(myAdapter);
                    xListview.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long arg3) {
                            int id=list.get(position-1).id;
                            Intent intent=new Intent(MainActivity.this,DetailsActivity.class);
                            intent.putExtra("id", id);
                            startActivity(intent);
                        }
                    });
                } else {
                    myAdapter.notifyDataSetChanged();
                }
                // 停止加载和刷新
                onLoad();
            }

        });
    }

    /**
     * 解析XML文件
     *
     * @param result
     */
    private List<OsChina> pareXML(InputStream is) {
        List<OsChina> osList = null;
        oschina = null;
        try {
            // 得到一个解析器
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(is, "utf-8");
            int eventType = parser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    osList = new ArrayList<OsChina>();
                    break;
                case XmlPullParser.START_TAG:
                    // 得到节点的名字
                    String name = parser.getName();
                    if ("tweet".equals(name)) {
                        oschina = new OsChina();
                    } else if ("id".equals(name)) {
                        oschina.setId(Integer.parseInt(parser.nextText()));
                    } else if ("portrait".equals(name)) {
                        oschina.setPortrait(parser.nextText());
                    } else if ("author".equals(name)) {
                        oschina.setAuthor(parser.nextText());
                    } else if ("imgSmall".equals(name)) {
                        oschina.setImgSmall(parser.nextText());
                    } else if ("imgBig".equals(name)) {
                        oschina.setImgBig(parser.nextText());
                    } else if ("body".equals(name)) {
                        oschina.setBody(parser.nextText());
                    }

                    break;
                case XmlPullParser.END_TAG:
                    String name1 = parser.getName();
                    if ("tweet".equals(name1)) {
                        osList.add(oschina);
                        oschina = null;
                    }
                    break;
                }
                // 得到下一个事件的类型
                eventType = parser.next();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return osList;

    }

    @Override
    public void onRefresh() {
        index = 0;
        isRefresh = true;
    }

    @Override
    public void onLoadMore() {
        index++;
        isRefresh = false;
        // 重新请求数据
        setData();
    }

    private void onLoad() {
        xListview.stopRefresh();
        xListview.stopLoadMore();
        xListview.setRefreshTime("刚刚");
    }
}
0 0
原创粉丝点击