解析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>
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>
相关文章推荐
- 菜刀ASPX 上传文件
- Java序列化和反序列化
- BZOJ1597 [Usaco2008 Mar]土地购买
- 2013年第四届蓝桥杯C/C++程序设计本科B组决赛 空白格式化(代码填空)
- iOS开发之category动态添加属性的方法------关联
- 静态初始化块,普通初始化块,构造器的执行顺序
- js调试
- java jvm shutdownhook
- array rotation
- 百度之星热身赛
- system on systemverilog
- ajax获取数据,应该返回json用js拼接 还是在后台拼接HTML完再返回
- c++/c的文件读入和字符串读入总结
- getopts 的坑
- Android 推送和统计最优轮循(心跳策略)探究实践
- android studio打包apk 百度地图不显示的问题
- 递归实现n个不同字符的所有全排列
- Android 最优轮循(心跳策略)探究实践
- 写了个简单的摸拟alert\提示框,有需要可以拿去用.
- beanUtils操作javabean