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="https://java.sun.com/jsp/jstl/core" %><?xml version="1.0" encoding="UTF-8"?>
<videoNews>
<c:forEach items="${xmlnews}" var="n">
<news >
<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 = "https://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中即可。
最後更新:2017-04-04 07:31:59