Android开发17——获取网络资源之XML数据

一、项目背景
在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。

本文获取web项目返回的XML数据。

 

 

二、实例代码

 

Web项目

/**
 * 新闻业务类
 *
 * @author xy
 *
 */
public class VideoNewsServiceImpl implements VideoNewsService
{
	public List<VideoNews> readNews()
	{
		List<VideoNews> lst = new ArrayList<VideoNews>();
		lst.add(new VideoNews(1, "喜洋洋", 20));
		lst.add(new VideoNews(2, "变形金刚", 10));
		lst.add(new VideoNews(3, "功夫熊猫", 20));
		return lst;
	}
}

/**
 * 新闻Servlet
 *
 * @author xy
 *
 */
public class ListServlet extends HttpServlet
{
	private static final long serialVersionUID = 1L;
	private VideoNewsService vs = new VideoNewsServiceImpl();

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		List<VideoNews> news = vs.readNews();
		request.setAttribute("xmlnews", news);
		request.getRequestDispatcher("/WEB-INF/pages/newsxml.jsp").forward(request, response);
	}
}
<%@ page language="java" contentType="text/xml; charset=utf-8" pageEncoding="utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><?xml version="1.0" encoding="UTF-8"?>
<videoNews>
	<c:forEach items="${xmlnews}" var="n">
		<news id="${n.id }">
			<title>${n.title }</title>
			<length>${n.timeLength }</length>
		</news>
	</c:forEach>
</videoNews>

Android项目

public class VideoNewsServiceImpl implements VideoNewsService
{
	/**
	 * 获取最新视频资讯,从XML文件中,比较常用
	 */
	public List<VideoNews> getNewsFromXML() throws Exception
	{
		List<VideoNews> lst = new ArrayList<VideoNews>();
		String path = "http://xxx.xxx.xxx.xxx:8080/web/ListServlet";
		URL url = new URL(path);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setReadTimeout(5000);
		conn.setRequestMethod("GET");
		if (200 == conn.getResponseCode())
		{
			InputStream instream = conn.getInputStream();
			lst = parseXML(instream);
		}
		return lst;
	}

	/**
	 * 解析XML
	 */
	private List<VideoNews> parseXML(InputStream instream) throws Exception
	{
		List<VideoNews> lst = null;
		VideoNews vn = null;
		// 利用ANDROID提供的API快速获得pull解析器
		XmlPullParser pullParser = Xml.newPullParser();
		// 设置需要解析的XML数据
		pullParser.setInput(instream, "UTF-8");
		// 取得事件
		int event = pullParser.getEventType();
		// 若为解析到末尾,文档结束
		while (event != XmlPullParser.END_DOCUMENT)
		{
			String nodeName = pullParser.getName();
			switch (event)
			{
				// 文档开始
				case XmlPullParser.START_DOCUMENT:
					lst = new ArrayList<VideoNews>();
					break;
				// 标签开始
				case XmlPullParser.START_TAG:
					if ("news".equals(nodeName))
					{
						vn = new VideoNews();
						Integer id = Integer.valueOf(pullParser.getAttributeValue(0));
						vn.setId(id);
					}
					if ("title".equals(nodeName))
					{
						String title = pullParser.nextText();
						vn.setTitle(title);
					}
					if ("length".equals(nodeName))
					{
						Integer length = Integer.valueOf(pullParser.nextText());
						vn.setTimeLength(length);
					}
					break;
				// 标签结束
				case XmlPullParser.END_TAG:
					if ("news".equals(nodeName))
					{
						lst.add(vn);
						vn = null;
					}
					break;
			}
			// 下一个标签
			event = pullParser.next();
		}
		return lst;
	}
}

最后把得到的数据绑定到ListView中即可。

时间: 2024-09-19 12:15:33

Android开发17——获取网络资源之XML数据的相关文章

Android开发18——获取网络资源之json数据

一.项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据. 本文获取web项目返回的JSON数据.Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML.     二.实例代码 Web项目 /** * 新闻业务类 * * @author 徐越 * */ public class VideoNewsServiceImpl implements VideoNewsService { public List<VideoN

Android开发16——获取网络资源之基础应用

一.项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据.本博文介绍了获取另一个web项目的资源.有一个web项目,在其WebRoot文件夹下有一个静态页面test.html.现有一个Android项目要获取到该页面的html代码显示在TextView中.   二.实例代码 public class MainActivity extends Activity { private EditText txtPath; private Butt

Android开发之完成登陆界面的数据保存回显操作实例_Android

本文实例讲述了Android开发之完成登陆界面的数据保存回显操作.分享给大家供大家参考,具体如下: LoginActivity.java: package com.example.login; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view

Android开发之完成登陆界面的数据保存回显操作实例

本文实例讲述了Android开发之完成登陆界面的数据保存回显操作.分享给大家供大家参考,具体如下: LoginActivity.java: package com.example.login; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view

Android开发之获取LayoutInflater对象的方法总结_Android

本文实例讲述了Android开发之获取LayoutInflater对象的方法.分享给大家供大家参考,具体如下: 在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View.本文主要目的是总结获取LayoutInflater对象的方法. 1.若能获取context对象,可以有以下几种方法: LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYO

Android编程实现获取新浪天气预报数据的方法_Android

本文实例讲述了Android编程实现获取新浪天气预报数据的方法.分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.php?city=武汉&password=DJOYnieT8234jlsK&day=0 其中,city后的城市可用java.net.URLEncoder.encode("武汉"," gb2312");也可以直接写"武汉",但不能用"wu

Android开发中Listview动态加载数据的方法示例

本文实例讲述了Android开发中Listview动态加载数据的方法.分享给大家供大家参考,具体如下: 最近在研究网络数据加载的问题,比如我有几百,甚至上千条数据,这些数据如果一次性全部加载到arraylist,然后再加载到Listview中.我们必然会去单独开线程来做,这样造成的结果就是会出现等待时间很长,用户体验非常不好.我的想法是动态加载数据,第一次加载十条,然后往下面滑动的时候再追加十条,再往下面滑动的时候再去追加,这样大大减少了用户等待的时间,同时给处理数据留下了时间.网上看到了这样一

Android开发之获取短信验证码后按钮背景变化并且出现倒计时

目前越来越多的app在注册或是进行对应操作时,要求获取短信验证码,在点击了获取短信验证码的按钮后,就是出现倒计时,比如倒计时120S,在倒计时期间内,按钮背景变化并且出现倒计时,当倒计时结束后,如果你没有获取到验证码,可以再次点击. 代码如下所示: VerCodeTimer mVerCodeTimer=(Button) findViewById(R.id.login_get_ver_code); private class VerCodeTimer extends CountDownTimer

Android编程实现获取新浪天气预报数据的方法

本文实例讲述了Android编程实现获取新浪天气预报数据的方法.分享给大家供大家参考,具体如下: 新浪天气预报地址: http://php.weather.sina.com.cn/xml.php?city=武汉&password=DJOYnieT8234jlsK&day=0 其中,city后的城市可用java.net.URLEncoder.encode("武汉"," gb2312");也可以直接写"武汉",但不能用"wu