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

相关文章
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
1天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
1天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
9天前
|
Android开发 开发者
Android网络和数据交互: 请解释Android中的AsyncTask的作用。
Android&#39;s AsyncTask simplifies asynchronous tasks for brief background work, bridging UI and worker threads. It involves execute() for starting tasks, doInBackground() for background execution, publishProgress() for progress updates, and onPostExecute() for returning results to the main thread.
10 0
|
9天前
|
网络协议 安全 API
Android网络和数据交互: 什么是HTTP和HTTPS?在Android中如何进行网络请求?
HTTP和HTTPS是网络数据传输协议,HTTP基于TCP/IP,简单快速,HTTPS则是加密的HTTP,确保数据安全。在Android中,过去常用HttpURLConnection和HttpClient,但HttpClient自Android 6.0起被移除。现在推荐使用支持TLS、流式上传下载、超时配置等特性的HttpsURLConnection进行网络请求。
9 0
|
18天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
3天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
11 0
|
14天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
16 0
|
16天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
1月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
11 0