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

目录
打赏
0
0
0
0
89
分享
相关文章
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
74 19
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
48 15
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
70 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
59 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
escrcpy 是一款基于 Scrcpy 的开源项目,使用 Electron 构建,提供图形化界面来显示和控制 Android 设备。它支持 USB 和 Wi-Fi 连接,帧率可达 30-120fps,延迟低至 35-70ms,启动迅速且画质清晰。escrcpy 拥有丰富的功能,包括自动化任务、多设备管理、反向网络共享、批量操作等,无需注册账号或广告干扰。适用于游戏直播、办公协作和教育演示等多种场景,是一款轻量级、高性能的 Android 控制工具。
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
102 17
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
68 10
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
85 10
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等