您的位置:首页 > 其它

解析XML上拉加载与下拉刷新

2016-05-13 20:52 225 查看
完成下拉刷新、上拉加载需要导jar包(Ion、androidasync),类库、util


package com.bw.week2;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;

import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import com.bw.week2.adapter.MyBaseAdapter;

import com.bw.week2.adapter.bean.News;

import com.bw.week2.util.SimpleDataExample;

import com.bw.week2.util.XListView;

import com.bw.week2.util.XListView.IXListViewListener;

import com.koushikdutta.async.future.FutureCallback;

import com.koushikdutta.ion.Ion;

public class MainActivity extends Activity implements IXListViewListener {

    private static final String TAG = "MainActivity";

    private XListView xlv_view;

    private MyBaseAdapter adapter;

    int pageIndex = 1;

    int pageSize = 20;

    int catalog = 1;

    private ArrayList<News> nList;

    List<News> allList = new ArrayList<News>();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        xlv_view = (XListView) findViewById(R.id.xlv_view);

        adapter = new MyBaseAdapter(this);

        xlv_view.setAdapter(adapter);

        

        //添加xlistview的上拉和下拉刷新监听器

        xlv_view.setPullLoadEnable(true);

        xlv_view.setPullRefreshEnable(true);

        xlv_view.setXListViewListener(this);

        // 请求网络方法

        getData();

    }

    private void getData() {

        String url = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="

                + pageIndex + "&pageSize=20";

        Ion.with(getApplicationContext()).load(url).asString()

                .setCallback(new FutureCallback<String>() {

                    @Override

                    public void onCompleted(Exception e, String result) {

                        if (e != null) {

                            return;

                        }

                        pull(result);

                        allList.addAll(nList);

                        adapter.addrest(allList);

                    }

                });

    }

    public void pull(String xml) {

        News books = null;

        try {

            // 获取factory

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

            // 获取parser

            XmlPullParser parser = factory.newPullParser();

            ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(

                    xml.getBytes());

            // 设置流

            parser.setInput(arrayInputStream, "UTF-8");

            int eventType = parser.getEventType();

            while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {

                switch (eventType) {

                case XmlPullParser.START_DOCUMENT:// 开始接收文件(走一次)

                    nList = new ArrayList<News>();

                    break;

                case XmlPullParser.START_TAG:// 开始解析元件

                    if ("news".equals(parser.getName())) {

                        // 得到对象

                        books = new News();

                    }

                    if (books != null) {

                        if ("id".equals(parser.getName())) {

                            books.id = parser.nextText();

                        } else if ("title".equals(parser.getName())) {

                            books.title = parser.nextText();

                        } else if ("body".equals(parser.getName())) {

                            books.body = parser.nextText();

                        } else if ("commentCount".equals(parser.getName())) {

                            books.commentCount = parser.nextText();

                        } else if ("author".equals(parser.getName())) {

                            books.author = parser.nextText();

                        } else if ("authorid".equals(parser.getName())) {

                            books.authorid = parser.nextText();

                        } else if ("pubDate".equals(parser.getName())) {

                            books.pubDate = parser.nextText();

                        } else if ("newstype".equals(parser.getName())) {

                            if ("type".equals(parser.getName())) {

                                books.newstype.type = parser.nextText();

                            } else if ("authoruid2".equals(parser.getName())) {

                                books.newstype.authoruid2 = parser.nextText();

                            }

                            Log.d(TAG,parser.getName());

                        }

                    }

                    break;

                case XmlPullParser.END_TAG:// 结束解析元素

                    // 判断不是Book

                    if ("news".equals(parser.getName())) {

                        nList.add(books);

                    }

                case XmlPullParser.END_DOCUMENT:// 结束接收文件

                    break;

                default:

                    break;

                }

                

                eventType = parser.next();

                

            }

        } catch (XmlPullParserException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    @Override

    public void onRefresh() {

        pageIndex = 1;

        nList.clear();

        allList.clear();

        getData();

        

        SimpleDataExample.setFormat("dddddddddddd", getApplicationContext());

        SimpleDataExample.getFormat("ddddddddddddd", getApplicationContext(), xlv_view);

        

    }

    @Override

    public void onLoadMore() {

        pageIndex++;

        getData();

        SimpleDataExample.setFormat("ddddddddddddd", getApplicationContext());

        SimpleDataExample.getFormat("dddddddddddd", getApplicationContext(), xlv_view);

    }

}

适配器

package com.bw.week2.adapter;

import java.util.ArrayList;

import java.util.List;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import com.bw.week2.MainActivity;

import com.bw.week2.R;

import com.bw.week2.adapter.bean.News;

public class MyBaseAdapter extends BaseAdapter {

    MainActivity context;

    List<News> nList = new ArrayList<News>();

    public MyBaseAdapter(MainActivity context) {

        super();

        this.context = context;

    }

    public void addrest(List<News> nList) {

        this.nList.clear();

        this.nList.addAll(nList);

        this.notifyDataSetChanged();

    }

    @Override

    public int getCount() {

        return nList.size();

    }

    @Override

    public Object getItem(int position) {

        return null;

    }

    @Override

    public long getItemId(int position) {

        return 0;

    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder;

        if (convertView == null) {

            convertView = View.inflate(context, R.layout.item, null);

            viewHolder = new ViewHolder();

            viewHolder.tv_item_name = (TextView) convertView

                    .findViewById(R.id.tv_item_name);

            viewHolder.tv_item_date = (TextView) convertView

                    .findViewById(R.id.tv_item_date);

            convertView.setTag(viewHolder);

        } else {

            viewHolder = (ViewHolder) convertView.getTag();

        }

        viewHolder.tv_item_name.setText(nList.get(position).title);

        viewHolder.tv_item_date.setText(nList.get(position).pubDate);

        return convertView;

    }

    class ViewHolder {

        TextView tv_item_name;

        TextView tv_item_date;

    }

}


XML布局(MainActivity)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

    <com.bw.week2.util.XListView

        android:id="@+id/xlv_view"

        android:layout_width="match_parent"

        android:layout_height="match_parent" >

    </com.bw.week2.util.XListView>

</RelativeLayout>


item布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/tv_item_name"

        android:layout_width="match_parent"

        android:layout_height="25dp" />

    <TextView

        android:id="@+id/tv_item_date"

        android:layout_width="match_parent"

        android:layout_height="25dp" />

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: