pull解析

本文介绍了一种使用Java实现的XML解析方法,并展示了如何通过解析HTTP请求返回的XML数据来更新ListView的内容。包括初始化数据加载、下拉刷新及加载更多功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

private String name;
	String path="http://www.oschina.net/action/api/news_list";
private LinkedList<News> list=new LinkedList<News>();
	private MyAdapter adapter;
<pre name="code" class="java">Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {


			switch (msg.what) {  
			// 加载初始化数据  
			case 1:  
			list = (LinkedList<News>) msg.obj;  
			adapter = new MyAdapter(MainActivity.this, list);  
			  
			  
			lv.setAdapter(adapter);  
			// loadOver();  
			break;  
			// 刷新  
			case 2:  
			list.clear();  
			for (News dataBean : (LinkedList<News>)msg.obj) {  
			//象开头添加  
			list.addFirst(dataBean);  
			}  
			// 刷新适配器  
			adapter.notifyDataSetChanged();  
			loadOver();  
			break;  
			// 加载更多  
			case 3:  
			  
			  
			for (News dataBean : (LinkedList<News>)msg.obj) {  
			//象结尾添加  
			list.addLast(dataBean);  
			}  
			// 刷新适配器  
			adapter.notifyDataSetChanged();  
			loadOver();  
			break;  
			}
		
		
		};


	};


<span style="white-space:pre">		</span>=======oncreat==========
<span style="white-space:pre">		</span>new Thread(){
			public void run() {
				getData(1);
			};
		}.start();

		
		// 下拉刷新是否激活  
		lv.setPullRefreshEnable(true);  
		// 加载更多是否激活  
		lv.setPullLoadEnable(true);  
		// xlistView刷新和加载更多的监听  
		lv.setXListViewListener(this); 


<span style="white-space:pre">	</span>// 停止加载更多/刷新  
	public void loadOver() {  
		// 停止加载更多  
		lv.stopLoadMore();  
		// 停止刷新  
		lv.stopRefresh();  
		//设置刷新时的时间  
		lv.setRefreshTime(getTime());  
		  
	}  
	
	//更新时间  
	public String getTime(){  
	  
	  
		SimpleDateFormat format=new SimpleDateFormat("hh:mm:ss");   
		  
		Date date=new Date();  
		String time = format.format(date);  
		return time;  
	  
	}



<pre name="code" class="java">====HttpURLConnection+pull解析======
private void getData(int i) {


		try {
		URL url = new URL(path);


		HttpURLConnection openConnection = (HttpURLConnection) url
		.openConnection();
		openConnection.setRequestMethod("GET");
		openConnection.connect();


		int responseCode = openConnection.getResponseCode();


		if (responseCode == 200) {


		InputStream inputStream = openConnection.getInputStream();
		pullParseXml(inputStream,i);
		}


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


		}

	private void pullParseXml(InputStream inputStream,int a) {
		LinkedList<News> list = new LinkedList<News>();
		News data = null;
		// 解析全部的xml
		// boolean isParse = true;
		try {
		// 创建一个xmlPullParser的工厂
		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		// 获取一个解析实例
		XmlPullParser parse = factory.newPullParser();
		// 设置输入流的编码格式
		parse.setInput(inputStream, "UTF-8");
		// 当前事件的类型
		int eventType = parse.getEventType();


		while (eventType != XmlPullParser.END_DOCUMENT) {
		switch (eventType) {
		case XmlPullParser.START_DOCUMENT:


		break;


		case XmlPullParser.START_TAG:
		name = parse.getName();


		if ("news".equals(name)) {
		data = new News();
		}


		break;


		case XmlPullParser.TEXT:

System.out.println(parse.getText());
		if ("title".equals(name)) {
		data.setTitle(parse.getText());
		} else if ("author".equals(name)) {
		data.setAuthor(parse.getText());
		} else if ("pubDate".equals(name)) {
		data.setPubDate(parse.getText());
		} else if ("commentCount".equals(name)) {
		data.setCommentCount(parse.getText());
		} else if ("body".equals(name)) {
		data.setBody(parse.getText());
		}


		break;
		case XmlPullParser.END_TAG:


		name = parse.getName();
		if ("news".equals(name)) {
		list.add(data);
		data = null;
		}
		name="";


		break;
		}


		eventType = parse.next();


		}


		Message msg = Message.obtain();
		msg.what=a;
		msg.obj = list;
		handler.sendMessage(msg);


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


======加载和刷新的方法=========
@Override
	public void onRefresh() {
		new Thread(){
			public void run() {
				getData(2);
			};
		}.start();
	}

	@Override
	public void onLoadMore() {
		new Thread(){
			public void run() {
				getData(3);
			};
		}.start();
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值