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

简介:

一、项目背景

在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

相关文章
|
26天前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
105 4
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
49 1
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
175 7
使用Java和XPath在XML文档中精准定位数据
|
4月前
|
开发工具 Android开发 开发者
Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?
本文介绍了一种在Android平台上实现实时截图快照的方法,尤其适用于无需依赖系统接口的情况,如在RTMP推送、RTSP服务或GB28181设备接入等场景下进行截图。通过底层模块(libSmartPublisher.so)实现了截图功能,封装了`SnapShotImpl.java`类来管理截图流程。此外,提供了关键代码片段展示初始化SDK实例、执行截图、以及在Activity销毁时释放资源的过程。此方案还考虑到了快照数据的灵活处理需求,符合GB/T28181-2022的技术规范。对于寻求更灵活快照机制的开发者来说,这是一个值得参考的设计思路。
|
2月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
32 3
|
2月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
88 0
|
2月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
86 0
|
2月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
516 0
|
4月前
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
103 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值