Android開發17——獲取網絡資源之XML數據

本文出自 “IT徐胖子的專欄” 博客,請務必保留此出處http://woshixy.blog.51cto.com/5637578/1088051



一、項目背景

在Android開發中有一項非常廣泛的應用:Android項目獲取另一個web項目的資源或者返回的數據。本文獲取web項目返回的XML數據。



二、實例代碼

Web項目

  1. /**

  2. * 新聞業務類

  3. *  

  4. * @author 徐越

  5. *  

  6. */

  7. publicclass VideoNewsServiceImpl implements VideoNewsService  

  8. {  

  9. public List<VideoNews> readNews()  

  10.    {  

  11.        List<VideoNews> lst = new ArrayList<VideoNews>();  

  12.        lst.add(new VideoNews(1, "喜洋洋", 20));  

  13.        lst.add(new VideoNews(2, "變形金剛", 10));  

  14.        lst.add(new VideoNews(3, "功夫熊貓", 20));  

  15. return lst;  

  16.    }  

  17. }  

  18. /**

  19. * 新聞Servlet

  20. *  

  21. * @author 徐越

  22. *  

  23. */

  24. publicclass ListServlet extends HttpServlet  

  25. {  

  26. privatestaticfinallong serialVersionUID = 1L;  

  27. private VideoNewsService vs = new VideoNewsServiceImpl();  

  28. protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  

  29.    {  

  30.        doPost(request, response);  

  31.    }  

  32. protectedvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  

  33.    {  

  34.        List<VideoNews> news = vs.readNews();  

  35.        request.setAttribute("xmlnews", news);  

  36.        request.getRequestDispatcher("/WEB-INF/pages/newsxml.jsp").forward(request, response);  

  37.    }  

  38. }

  1. <%@ 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"?>

  2. <videoNews>

  3. <c:forEachitems="${xmlnews}"var="n">

  4. <newsid="${n.id }">

  5. <title>${n.title }</title>

  6. <length>${n.timeLength }</length>

  7. </news>

  8. </c:forEach>

  9. </videoNews>

Android項目

  1. publicclass VideoNewsServiceImpl implements VideoNewsService  

  2. {  

  3. /**

  4.     * 獲取最新視頻資訊,從XML文件中,比較常用

  5.     */

  6. public List<VideoNews> getNewsFromXML() throws Exception  

  7.    {  

  8.        List<VideoNews> lst = new ArrayList<VideoNews>();  

  9.        String path = "http://xxx.xxx.xxx.xxx:8080/web/ListServlet";  

  10.        URL url = new URL(path);  

  11.        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  

  12.        conn.setReadTimeout(5000);  

  13.        conn.setRequestMethod("GET");  

  14. if (200 == conn.getResponseCode())  

  15.        {  

  16.            InputStream instream = conn.getInputStream();  

  17.            lst = parseXML(instream);  

  18.        }  

  19. return lst;  

  20.    }  

  21. /**

  22.     * 解析XML

  23.     */

  24. private List<VideoNews> parseXML(InputStream instream) throws Exception  

  25.    {  

  26.        List<VideoNews> lst = null;  

  27.        VideoNews vn = null;  

  28. // 利用ANDROID提供的API快速獲得pull解析器

  29.        XmlPullParser pullParser = Xml.newPullParser();  

  30. // 設置需要解析的XML數據

  31.        pullParser.setInput(instream, "UTF-8");  

  32. // 取得事件

  33. int event = pullParser.getEventType();  

  34. // 若爲解析到末尾,文檔結束

  35. while (event != XmlPullParser.END_DOCUMENT)  

  36.        {  

  37.            String nodeName = pullParser.getName();  

  38. switch (event)  

  39.            {  

  40. // 文檔開始

  41. case XmlPullParser.START_DOCUMENT:  

  42.                    lst = new ArrayList<VideoNews>();  

  43. break;  

  44. // 標籤開始

  45. case XmlPullParser.START_TAG:  

  46. if ("news".equals(nodeName))  

  47.                    {  

  48.                        vn = new VideoNews();  

  49.                        Integer id = Integer.valueOf(pullParser.getAttributeValue(0));  

  50.                        vn.setId(id);  

  51.                    }  

  52. if ("title".equals(nodeName))  

  53.                    {  

  54.                        String title = pullParser.nextText();  

  55.                        vn.setTitle(title);  

  56.                    }  

  57. if ("length".equals(nodeName))  

  58.                    {  

  59.                        Integer length = Integer.valueOf(pullParser.nextText());  

  60.                        vn.setTimeLength(length);  

  61.                    }  

  62. break;  

  63. // 標籤結束

  64. case XmlPullParser.END_TAG:  

  65. if ("news".equals(nodeName))  

  66.                    {  

  67.                        lst.add(vn);  

  68.                        vn = null;  

  69.                    }  

  70. break;  

  71.            }  

  72. // 下一個標籤

  73.            event = pullParser.next();  

  74.        }  

  75. return lst;  

  76.    }  

  77. }

最後把得到的數據綁定到ListView中即可。

本文出自 “IT徐胖子的專欄” 博客,請務必保留此出處http://woshixy.blog.51cto.com/5637578/1088051


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章