XML解析



package com.example.test___1;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.example.test___1.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 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.Xml;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
 int index = 1;
 String url = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="
   + index + "&pageSize=15";

 List<News> newsList = new ArrayList<News>();
 Handler handler = new Handler() {

  private News news;
  private String name;
  private MyBaseAdapter myBaseAdapter;

  public void handleMessage(android.os.Message msg) {

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

   String xml = (String) msg.obj;
   int tag = msg.arg1;

   XmlPullParser pullParser = Xml.newPullParser();
   // 鎶奡tring鏁版嵁杞垚娴�
   ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
     xml.getBytes());

   try {
    pullParser
      .setInput(new InputStreamReader(byteArrayInputStream));

    int eventType = pullParser.getEventType();
    // 濡傛灉涓嶆槸缁撴潫鏂囨。灏辩户缁В鏋�
    while (eventType != XmlPullParser.END_DOCUMENT) {

     switch (eventType) {
     // 璇诲埌寮�濮嬫爣绛�
     case XmlPullParser.START_TAG:
      // 鑾峰緱鏍囩鍚�
      name = pullParser.getName();

      if ("news".equals(name)) {

       news = new News();
      } else if ("title".equals(name)) {
       // 寰楀埌title鏍囩閲岀殑鏂囨湰
       news.title = pullParser.nextText();

      } else if ("body".equals(name)) {
       news.body = pullParser.nextText();

      } else if ("commentCount".equals(name)) {
       news.commentCount = pullParser.nextText();

      } else if ("author".equals(name)) {

       news.author = pullParser.nextText();
      } else if ("pubDate".equals(name)) {

       news.pubDate = pullParser.nextText();
      }

      break;

     // 璇诲埌缁撴潫鏍囩
     case XmlPullParser.END_TAG:

      name = pullParser.getName();

      if ("news".equals(name)) {
       list.add(news);
      }
      break;
     }

     eventType = pullParser.next();
    }

   } catch (XmlPullParserException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

   switch (tag) {
   case 1:
    newsList.addAll(list);
    myBaseAdapter = new MyBaseAdapter(getActivity(), newsList);

    xlistView.setAdapter(myBaseAdapter);
    break;
   // 鍒锋柊
   case 2:
    newsList.clear();
    newsList.addAll(list);
    myBaseAdapter.notifyDataSetChanged();
    break;
   // 鍔犺浇鏇村
   case 3:
    newsList.addAll(list);
    myBaseAdapter.notifyDataSetChanged();
    break;

   }

  };

 };

 private XListView xlistView;

 @Override
 public View onCreateView(LayoutInflater inflater,
   @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view = View.inflate(getActivity(), R.layout.fragment, null);

  xlistView = (XListView) view.findViewById(R.id.xlistView);
  xlistView.setPullLoadEnable(true);
  xlistView.setXListViewListener(new IXListViewListener() {

   @Override
   public void onRefresh() {
    index += 1;

    getData("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="
      + index + "&pageSize=15", 2);
    // 鍋滄鍒锋柊
    xlistView.stopRefresh();
   }

   @Override
   public void onLoadMore() {
    index += 1;
    getData("http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="
      + index + "&pageSize=15", 3);
    // 鍋滄鍔犺浇鏇村
    xlistView.stopLoadMore();
   }
  });
  return view;
 }

 @Override
 public void onActivityCreated(@Nullable Bundle savedInstanceState) {

  getData(url, 1);

  super.onActivityCreated(savedInstanceState);
 }

 private void getData(String url, final int tag) {

  HttpUtils httpUtils = new HttpUtils();
  httpUtils.configCurrentHttpCacheExpiry(0);
  httpUtils.send(HttpMethod.GET, url, new RequestCallBack<String>() {

   @Override
   public void onFailure(HttpException arg0, String arg1) {
    // TODO Auto-generated method stub

   }

   @Override
   public void onSuccess(ResponseInfo<String> arg0) {
    // 寰楀埌鏁版嵁xml
    String result = arg0.result;
    // 缁檋andler鍙戦�佹暟鎹�
    Message msg = Message.obtain();
    msg.obj = result;
    msg.arg1 = tag;
    handler.sendMessage(msg);

   }
  });

 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值