本文出自 “IT徐胖子的專欄” 博客,請務必保留此出處http://woshixy.blog.51cto.com/5637578/1088051
一、項目背景
在Android開發中有一項非常廣泛的應用:Android項目獲取另一個web項目的資源或者返回的數據。本文獲取web項目返回的XML數據。
二、實例代碼
Web項目
/**
* 新聞業務類
*
* @author 徐越
*
*/
publicclass 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 徐越
*
*/
publicclass ListServlet extends HttpServlet
{
privatestaticfinallong serialVersionUID = 1L;
private VideoNewsService vs = new VideoNewsServiceImpl();
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
protectedvoid 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" %><?xmlversion="1.0"encoding="UTF-8"?>
<videoNews>
<c:forEachitems="${xmlnews}"var="n">
<newsid="${n.id }">
<title>${n.title }</title>
<length>${n.timeLength }</length>
</news>
</c:forEach>
</videoNews>
Android項目
publicclass 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中即可。
本文出自 “IT徐胖子的專欄” 博客,請務必保留此出處http://woshixy.blog.51cto.com/5637578/1088051