且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-14 13:31:41

一、项目背景

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

 

 

二、实例代码

Web项目


  1. /**  
  2.  * 新闻业务类  
  3.  *   
  4.  * @author 徐越  
  5.  *   
  6.  */ 
  7. public class 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. /**  
  20.  * 新闻Servlet  
  21.  *   
  22.  * @author 徐越  
  23.  *   
  24.  */ 
  25. public class ListServlet extends HttpServlet  
  26. {  
  27.     private static final long serialVersionUID = 1L;  
  28.     private VideoNewsService vs = new VideoNewsServiceImpl();  
  29.  
  30.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  31.     {  
  32.         doPost(request, response);  
  33.     }  
  34.  
  35.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  36.     {  
  37.         List<VideoNews> news = vs.readNews();  
  38.         request.setAttribute("xmlnews", news);  
  39.         request.getRequestDispatcher("/WEB-INF/pages/newsxml.jsp").forward(request, response);  
  40.     }  

  1. <%@ 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"?> 
  2. <videoNews> 
  3.     <c:forEach items="${xmlnews}" var="n"> 
  4.         <news id="${n.id }"> 
  5.             <title>${n.title }</title> 
  6.             <length>${n.timeLength }</length> 
  7.         </news> 
  8.     </c:forEach> 
  9. </videoNews> 

Android项目


  1. public class 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.     /**  
  23.      * 解析XML  
  24.      */ 
  25.     private List<VideoNews> parseXML(InputStream instream) throws Exception  
  26.     {  
  27.         List<VideoNews> lst = null;  
  28.         VideoNews vn = null;  
  29.         // 利用ANDROID提供的API快速获得pull解析器  
  30.         XmlPullParser pullParser = Xml.newPullParser();  
  31.         // 设置需要解析的XML数据  
  32.         pullParser.setInput(instream, "UTF-8");  
  33.         // 取得事件  
  34.         int event = pullParser.getEventType();  
  35.         // 若为解析到末尾,文档结束  
  36.         while (event != XmlPullParser.END_DOCUMENT)  
  37.         {  
  38.             String nodeName = pullParser.getName();  
  39.             switch (event)  
  40.             {  
  41.                 // 文档开始  
  42.                 case XmlPullParser.START_DOCUMENT:  
  43.                     lst = new ArrayList<VideoNews>();  
  44.                     break;  
  45.                 // 标签开始  
  46.                 case XmlPullParser.START_TAG:  
  47.                     if ("news".equals(nodeName))  
  48.                     {  
  49.                         vn = new VideoNews();  
  50.                         Integer id = Integer.valueOf(pullParser.getAttributeValue(0));  
  51.                         vn.setId(id);  
  52.                     }  
  53.                     if ("title".equals(nodeName))  
  54.                     {  
  55.                         String title = pullParser.nextText();  
  56.                         vn.setTitle(title);  
  57.                     }  
  58.                     if ("length".equals(nodeName))  
  59.                     {  
  60.                         Integer length = Integer.valueOf(pullParser.nextText());  
  61.                         vn.setTimeLength(length);  
  62.                     }  
  63.                     break;  
  64.                 // 标签结束  
  65.                 case XmlPullParser.END_TAG:  
  66.                     if ("news".equals(nodeName))  
  67.                     {  
  68.                         lst.add(vn);  
  69.                         vn = null;  
  70.                     }  
  71.                     break;  
  72.             }  
  73.             // 下一个标签  
  74.             event = pullParser.next();  
  75.         }  
  76.         return lst;  
  77.     }  

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

本文转自IT徐胖子的专栏博客51CTO博客,原文链接http://blog.51cto.com/woshixy/1088051如需转载请自行联系原作者


woshixuye111