解析xml

解析从网路上面请求来的xml并用XListView展示:封装类



import java.io.Serializable;

import com.thoughtworks.xstream.annotations.XStreamAlias;
public class News implements Serializable{
	public String id;
	public String title;
	public String body;
	public String commentCount;
	public String author;
	public String authorid;
	public String pubDate;
	public String url;
	@XStreamAlias("newstype")
	public Newstype newstype;
	public class Newstype{
		public String type;
		public String authoruid2;
		public String eventurl;
		public String attachment;
	}
}

import java.io.Serializable;
import java.util.ArrayList;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("oschina")
public class Bean implements Serializable{
	public String catalog;
	public String newsCount;
	public String pagesize;
	@XStreamAlias("newslist")
	public Newslist newslist;
	public class Newslist{
		@XStreamImplicit(itemFieldName="news")
		public ArrayList<News> news;
		
	}
}

package com.example.yuekao;

public class BeanList {
	private String id;
	private String title;
	private String body;
	private String commentCount;
	private String author;
	private String authorid;
	private String pubDate;
	private String url;
	private String type;
	private String authoruid2;
	private String eventurl;
	private String attachment;
	@Override
	public String toString() {
		return "BeanList [id=" + id + ", title=" + title + ", body=" + body
				+ ", commentCount=" + commentCount + ", author=" + author
				+ ", authorid=" + authorid + ", pubDate=" + pubDate + ", url="
				+ url + ", type=" + type + ", authoruid2=" + authoruid2
				+ ", eventurl=" + eventurl + ", attachment=" + attachment + "]";
	}
	public BeanList(String id, String title, String body, String commentCount,
			String author, String authorid, String pubDate, String url,
			String type, String authoruid2, String eventurl, String attachment) {
		super();
		this.id = id;
		this.title = title;
		this.body = body;
		this.commentCount = commentCount;
		this.author = author;
		this.authorid = authorid;
		this.pubDate = pubDate;
		this.url = url;
		this.type = type;
		this.authoruid2 = authoruid2;
		this.eventurl = eventurl;
		this.attachment = attachment;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getCommentCount() {
		return commentCount;
	}
	public void setCommentCount(String commentCount) {
		this.commentCount = commentCount;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getAuthorid() {
		return authorid;
	}
	public void setAuthorid(String authorid) {
		this.authorid = authorid;
	}
	public String getPubDate() {
		return pubDate;
	}
	public void setPubDate(String pubDate) {
		this.pubDate = pubDate;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public String getAuthoruid2() {
		return authoruid2;
	}
	public void setAuthoruid2(String authoruid2) {
		this.authoruid2 = authoruid2;
	}
	public String getEventurl() {
		return eventurl;
	}
	public void setEventurl(String eventurl) {
		this.eventurl = eventurl;
	}
	public String getAttachment() {
		return attachment;
	}
	public void setAttachment(String attachment) {
		this.attachment = attachment;
	}
	
}


Mainactivity中:


package com.example.yuekao;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity {
	private ViewPager viewPager;
	private String [] Title=new String []{"咨讯","热点","博客","推荐"};
	
	private com.viewpagerindicator.TabPageIndicator pageIndicator;
	private String [] url=new String []{"http://www.oschina.net/action/api/news_list",
										"http://www.oschina.net/action/api/news_list?show=week",
										"http://www.oschina.net/action/api/blog_list?type=latest",
										"http://www.oschina.net/action/api/blog_list?type=recommend"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentPagerAdapter adapter=new TabPageIndicator(getSupportFragmentManager());
        viewPager=(ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);
        pageIndicator=(com.viewpagerindicator.TabPageIndicator)findViewById(R.id.tabpager);
        pageIndicator.setViewPager(viewPager);

    }
    class TabPageIndicator extends FragmentPagerAdapter{

		public TabPageIndicator(FragmentManager fm) {
			super(fm);
		}

		@Override
		public Fragment getItem(int arg0) {
			Fragment fragment=new MyFragment(url,arg0);
			return fragment;
		}
		@Override
		public CharSequence getPageTitle(int position) {
			return Title[position%Title.length];
		}
		@Override
		public int getCount() {
			return Title.length;
		}
    	
    }
}

Myadapter:


package com.example.yuekao;

import java.util.List;

import android.content.Context;
import android.content.pm.LabeledIntent;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class Myadapter extends BaseAdapter {

	private List<BeanList> listt;
	private Context context;

	public Myadapter(Context context, List<BeanList> listt) {
		// TODO Auto-generated constructor stub
		this.context=context;
		this.listt=listt;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return listt.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return listt.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewholder;
		if(convertView==null){
			viewholder=new ViewHolder();
			convertView=LayoutInflater.from(context).inflate(R.layout.item,null);
			viewholder.tv_title=(TextView) convertView.findViewById(R.id.tv_title);
			viewholder.tv_content=(TextView) convertView.findViewById(R.id.tv_content);
			convertView.setTag(viewholder);
		}else{
			viewholder=(ViewHolder) convertView.getTag();
		}
		viewholder.tv_title.setText(listt.get(position).getTitle());
		viewholder.tv_content.setText(listt.get(position).getBody());
		return convertView;
	}
class ViewHolder{
	TextView tv_title;
	TextView tv_content;
}
}

MyFragment:



package com.example.yuekao;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.yuekao.Bean.Newslist;
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 com.thoughtworks.xstream.XStream;

public class MyFragment extends Fragment implements IXListViewListener{
	
	private ArrayList<Newslist> list;
	private int position;
	private String[] urll;
	private List<BeanList> listt=new ArrayList<BeanList>();
	private String uu="http://www.oschina.net/action/api/news_list";
	private View view;
	private int start = 0;
	private Myadapter adapter;
	private static int refreshCnt = 0;
	private XListView xlistview;
	private MainActivity mainActivity;
	private Handler mHandler;
	public MyFragment(String[] url, int position) {
		this.urll=url;
		this.position=position;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.myfragment,container,false);
		xlistview = (XListView) view.findViewById(R.id.listview);
		mainActivity = (MainActivity) getActivity();
		xlistview.setPullLoadEnable(true);	  //上拉加载默认为false
		xlistview.setPullRefreshEnable(true);//下拉刷新默认为true
		xlistview.setXListViewListener(this);
		mHandler = new Handler();
		return view;
	}
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		getXml();
	}
	protected void getXml() {
		HttpUtils httputils=new HttpUtils();
		httputils.configResponseTextCharset("utf-8");
		httputils.send(HttpMethod.POST, uu,new RequestCallBack<String>() {
			@Override
			public void onFailure(HttpException arg0, String arg1) {
			}
			@Override
			public void onSuccess(ResponseInfo<String> arg0) {
				String result = arg0.result;
				Log.i("::::::::::::::::::::::::::::::::",result);
				
				XStream xStream=new XStream();
				xStream.processAnnotations(Bean.class);
				Bean xml = (Bean) xStream.fromXML(result);
				ArrayList<News> news = xml.newslist.news;
				for (News n : news) {
					String author = n.author;
					String authorid = n.authorid;
					String body = n.body;
					String commentCount = n.commentCount;
					String id = n.id;
					String title = n.title;
					String pubDate = n.pubDate;
					String url = n.url;
					String attachment = n.newstype.attachment;
					String authoruid2 = n.newstype.authoruid2;
					String eventurl = n.newstype.eventurl;
					String type = n.newstype.type;
					listt.add(new BeanList(id, title, body, commentCount, author, authorid, pubDate, url, type, authoruid2, eventurl, attachment));
				}
				getActivity().runOnUiThread(new Runnable() {
					
					@Override
					public void run() {
						adapter = new Myadapter(getActivity(),listt);
						xlistview.setAdapter(adapter);
					}
				});
			}
		});
	}

	@Override
	public void onRefresh() {
		mHandler.postDelayed(new Runnable() {
			@Override
			public void run() {
				start = ++refreshCnt;
				geneItems();
				adapter.notifyDataSetChanged();
				onLoad();/*设置头部刷新时间*/
				//为了获得上次刷新时间,不用下面新建mAdapter
			}
		}, 2000);		
	}

	protected void geneItems() {
		getXml();
	}

	@Override
	public void onLoadMore() {
		xlistview.stopRefresh();
		xlistview.stopLoadMore();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		String nowTime=df.format(new Date(System.currentTimeMillis()));// 获取当前系统时间
		xlistview.setRefreshTime(nowTime);//释放时提示正在刷新时的当前时间		
	}
	/*设置头部刷新时间*/
	private void onLoad() {
		xlistview.stopRefresh();
		xlistview.stopLoadMore();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
		String nowTime=df.format(new Date(System.currentTimeMillis()));// 获取当前系统时间
		xlistview.setRefreshTime(nowTime);//释放时提示正在刷新时的当前时间
	}
}

主页面配置:
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/tabpager"
        android:background="@drawable/base_action_bar_bg"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        />
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />

</LinearLayout>

一切ok!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值