XmlPull解析
2016-03-08 12:02
204 查看
package com.example.adminis import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.util.Log; import android.util.Xml; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; import com.example.VO.News; import com.example.adapter.MyAdapter; import com.example.administrator.zhangxinyuekao.MainActivity; import com.example.administrator.zhangxinyuekao.R; import com.example.administrator.zhangxinyuekao.reflush.XListView; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2016/3/8. */ public class OneFragment extends Fragment implements XListView.IXListViewListener{ private View view; private XListView lv; private List<News> list; private MyAdapter adapter; int page=10; int size=10; Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==1){ // adapter = new MyAdapter(getActivity(),list); // lv.setAdapter(adapter); } super.handleMessage(msg); } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view=View.inflate(getActivity(), R.layout.fragment_one,null); initialize(); //设置XListView支持加载 lv.setPullRefreshEnable(true); lv.setPullLoadEnable(true); lv.setXListViewListener(this); return view; } private void initialize() { lv = (XListView) view.findViewById(R.id.xlv); init(page,size); } private void init(final int size, final int page) { new Thread(new Runnable() { @Override public void run() { final HttpUtils httpUtils=new HttpUtils(); final RequestParams params = new RequestParams(); params.addBodyParameter("catalog", "1"); params.addBodyParameter("pageIndex", ""+page); params.addBodyParameter("pageSize", ""+size); httpUtils.send(HttpRequest.HttpMethod.POST, " ",params, new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { String str=responseInfo.result; Log.d("OneFragment","---------"+ str.toString()); ByteArrayInputStream is=new ByteArrayInputStream(str.getBytes()); try { list=pullParseXml(is); Log.d("OneFragment", list.toString()); handler.sendMessage(handler.obtainMessage(1,list)); } catch (Exception e) { e.printStackTrace(); } } @Override public void onFailure(HttpException e, String s) { } }); } }).start(); } //pull解析xml public List<News> pullParseXml(InputStream is) throws Exception { List<News> lists = null; News student = null; XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); // 由android.util.Xml创建一个XmlPullParser实例 parser.setInput(is, "utf-8");// 对数据进行解析前的处理,预先设置好 int enventType = parser.getEventType();// 触发解析事件的进行,得到第一个解析事件的类型 String tagName = ""; while (enventType != XmlPullParser.END_DOCUMENT) { switch (enventType) { case XmlPullParser.START_DOCUMENT: System.out.println("文档解析开始"); break; case XmlPullParser.START_TAG: tagName = parser.getName();// 得到标签名 Log.i("aaa", "标签元素解析开始,当前标签名:" + tagName); if ("newslist".equals(tagName)) { lists = new ArrayList<News>(); } if ("news".equals(tagName)) { student = new News(); } break; case XmlPullParser.TEXT: String text = parser.getText();// 得到文本标签的值 Log.i("aaa", "文本解析开始,当前值:" + text); if ("id".equals(tagName)) { student.setId(text); } else if ("title".equals(tagName)) { student.setTitle(text); } else if ("body".equals(tagName)) { student.setBody(text); } else if ("pubDate".equals(tagName)) { student.setPubDate(text); } break; case XmlPullParser.END_TAG: tagName = parser.getName(); if ("news".equals(tagName)) { lists.add(student); student = null; } tagName = ""; break; case XmlPullParser.END_DOCUMENT: break; } // 触发下一个解析事件(解析标签还是文本) enventType=parser.next(); } return lists; } @Override public void onRefresh() { handler.postDelayed(new Runnable() { @Override public void run() { list.clear(); init(size , page += 1); adapter.notifyDataSetChanged(); lv.setRefreshTime("刚刚"); lv.stopRefresh(); } },2000); } @Override public void onLoadMore() { handler.postDelayed(new Runnable() { @Override public void run() { init(size+=5,page); adapter.notifyDataSetChanged(); lv.stopLoadMore(); } },2000); } }
相关文章推荐
- HDOJ 5233 Gunner II【二分&&邻接表】
- Android 屏幕适配
- Java并发编程(十二):线程池的使用(转载)
- 雅虎的34条军规
- 关于MyEclipse破解时找不到Common的解决方法
- memtable Cassandra存储机制
- iOS代码拾遗录-AVAudioSession状态
- .NET Framework 类库
- Java并发编程(十一):阻塞队列(转载)
- 分享一些即时通讯的源码
- JAVA中String、StringBuffer、StringBuilder区别
- Java中的Exception和RuntimeException的区别
- MySQL 数据库性能优化之SQL优化
- Java中避免NullPointerException的一些方法
- HashMap源码分析(一)
- 数据传递
- Spring 整合Quartz两种方式比较(JobDetailBean和MethodInvokingJobDetailFactoryBean方式)
- leetcode--Range Sum Query - Immutable
- 判断用户的登录状态,弹出alertView来进行登录操作
- HashMap源码分析(一)