Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回

网络数据获取与XML展示实践指南 在当今的互联网应用中,数据交换是构成网络通信核心的基础。网络数据交换涉及客户端和服务器之间的数据发送与接收,通过各种网络协议确保数据的准确性和完整性。最基本的网络数据交换协议是HTTP(超文本传输协议),它定义了请求和响应消息的格式,以及服务器和客户端之间数据传输的步骤。在Android应用开发中,实现网络请求是获取远程数据的首要步骤。Android提供了多种方式来执行网络请求,其中包括使用HttpURLConnection, Apache HttpClient以及OkHttp等第三方库。 阅读详情

原文来自于:http://daimajishu.iteye.com/blog/1088626

1.服务器端代码样例:

Java代码 
  1. public class VideoListAction extends Action   
  2. {  
  3.     private VideoService service = new VideoServiceBean();  
  4.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  5.             HttpServletRequest request, HttpServletResponse response)  
  6.             throws Exception   
  7.     {  
  8.         //得到最新的视频资讯  
  9.         List<Video> videos = service.getLastVideos();  
  10.         VideoForm formbean = (VideoForm)form;  
  11.         if("json".equals(formbean.getFormat()))  
  12.         {  
  13.             //构建json字符串  
  14.             StringBuilder json = new StringBuilder();  
  15.             json.append('[');  
  16.             for(Video video : videos)  
  17.             { // 需要构造的形式是{id:76,title:"xxxx",timelength:80}  
  18.                 json.append('{');  
  19.                 json.append("id:").append(video.getId()).append(',');  
  20.                 json.append("title:\"").append(video.getTitle()).append("\",");  
  21.                 json.append("timelength:").append(video.getTime());  
  22.                 json.append('}').append(',');  
  23.             }  
  24.             json.deleteCharAt(json.length()-1);  
  25.             json.append(']');  
  26.             //把json字符串放置于request  
  27.             request.setAttribute("json", json.toString());  
  28.             return mapping.findForward("jsonvideo");  
  29.         }  
  30.         else  
  31.         {             
  32.             request.setAttribute("videos", videos);  
  33.             return mapping.findForward("video");  
  34.         }  
  35.     }  
  36. }  

Java代码 
  1. public class VideoServiceBean implements VideoService   
  2. {  
  3.     public List<Video> getLastVideos() throws Exception  
  4.     {  
  5.         //理论上应该查询数据库  
  6.         List<Video> videos = new ArrayList<Video>();  
  7.         videos.add(new Video(78, "喜羊羊与灰太狼全集", 90));  
  8.         videos.add(new Video(78, "实拍舰载直升东海救援演习", 20));  
  9.         videos.add(new Video(78, "喀麦隆VS荷兰", 30));  
  10.         return videos;  
  11.     }  
  12. }  

Java代码 
  1. public class VideoListAction extends Action   
  2. {  
  3.     private VideoService service = new VideoServiceBean();  
  4.     public ActionForward execute(ActionMapping mapping, ActionForm form,  
  5.             HttpServletRequest request, HttpServletResponse response)  
  6.             throws Exception   
  7.     {  
  8.         //得到最新的视频资讯  
  9.         List<Video> videos = service.getLastVideos();  
  10.         VideoForm formbean = (VideoForm)form;  
  11.         if("json".equals(formbean.getFormat()))  
  12.         {  
  13.             //构建json字符串  
  14.             StringBuilder json = new StringBuilder();  
  15.             json.append('[');  
  16.             for(Video video : videos)  
  17.             { // 需要构造的形式是{id:76,title:"xxxx",timelength:80}  
  18.                 json.append('{');  
  19.                 json.append("id:").append(video.getId()).append(',');  
  20.                 json.append("title:\"").append(video.getTitle()).append("\",");  
  21.                 json.append("timelength:").append(video.getTime());  
  22.                 json.append('}').append(',');  
  23.             }  
  24.             json.deleteCharAt(json.length()-1);  
  25.             json.append(']');  
  26.             //把json字符串放置于request  
  27.             request.setAttribute("json", json.toString());  
  28.             return mapping.findForward("jsonvideo");  
  29.         }  
  30.         else  
  31.         {             
  32.             request.setAttribute("videos", videos);  
  33.             return mapping.findForward("video");  
  34.         }  
  35.     }  
  36. }  

2.客户端:使用XML方式与JSON方式返回数据

Java代码 
  1. public class VideoService   
  2. {  
  3.     /** 
  4.      * 以XML方式返回获取最新的资讯 
  5.      * @return 
  6.      * @throws Exception 
  7.      */  
  8.     public static List<Video> getLastVideos() throws Exception  
  9.     {  
  10.         //确定请求服务器的地址  
  11.         //注意在Android模拟器中访问本机服务器时不可以使用localhost与127字段  
  12.         //因为模拟器本身是使用localhost绑定  
  13.         String path = "http://192.168.1.100:8080/videoweb/video/list.do";  
  14.         //建立一个URL对象  
  15.         URL url = new URL(path);  
  16.         //得到打开的链接对象  
  17.         HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
  18.         //设置请求超时与请求方式  
  19.         conn.setReadTimeout(5*1000);  
  20.         conn.setRequestMethod("GET");  
  21.         //从链接中获取一个输入流对象  
  22.         InputStream inStream = conn.getInputStream();  
  23.         //对输入流进行解析  
  24.         return parseXML(inStream);  
  25.     }  
  26.       
  27.     /** 
  28.      * 解析服务器返回的协议,得到资讯 
  29.      * @param inStream 
  30.      * @return 
  31.      * @throws Exception 
  32.      */  
  33.     private static List<Video> parseXML(InputStream inStream) throws Exception  
  34.     {  
  35.         List<Video> videos = null;  
  36.         Video video = null;  
  37.         //使用XmlPullParser  
  38.         XmlPullParser parser = Xml.newPullParser();  
  39.         parser.setInput(inStream, "UTF-8");  
  40.         int eventType = parser.getEventType();//产生第一个事件  
  41.         //只要不是文档结束事件  
  42.         while(eventType!=XmlPullParser.END_DOCUMENT)  
  43.         {  
  44.             switch (eventType)   
  45.             {  
  46.                 case XmlPullParser.START_DOCUMENT:  
  47.                     videos = new ArrayList<Video>();  
  48.                     break;        
  49.                       
  50.                 case XmlPullParser.START_TAG:  
  51.                     //获取解析器当前指向的元素的名称  
  52.                     String name = parser.getName();  
  53.                     if("video".equals(name))  
  54.                     {  
  55.                         video = new Video();  
  56.                         //把id属性写入  
  57.                         video.setId(new Integer(parser.getAttributeValue(0)));  
  58.                     }  
  59.                     if(video!=null)  
  60.                     {  
  61.                         if("title".equals(name))  
  62.                         {  
  63.                             //获取解析器当前指向元素的下一个文本节点的值  
  64.                             video.setTitle(parser.nextText());  
  65.                         }  
  66.                         if("timelength".equals(name))  
  67.                         {  
  68.                             //获取解析器当前指向元素的下一个文本节点的值  
  69.                             video.setTime(new Integer(parser.nextText()));  
  70.                         }  
  71.                     }  
  72.                     break;  
  73.                       
  74.                 case XmlPullParser.END_TAG:  
  75.                     if("video".equals(parser.getName()))  
  76.                     {  
  77.                         videos.add(video);  
  78.                         video = null;  
  79.                     }  
  80.                     break;  
  81.             }  
  82.             eventType = parser.next();  
  83.         }  
  84.         return videos;  
  85.     }  
  86.       
  87.     /** 
  88.      * 以Json方式返回获取最新的资讯,不需要手动解析,JSON自己会进行解析 
  89.      * @return 
  90.      * @throws Exception 
  91.      */  
  92.     public static List<Video> getJSONLastVideos() throws Exception  
  93.     {  
  94.         //  
  95.         List<Video> videos = new ArrayList<Video>();  
  96.         //  
  97.         String path = "http://192.168.1.100:8080/videoweb/video/list.do?format=json";  
  98.         //建立一个URL对象  
  99.         URL url = new URL(path);  
  100.         //得到打开的链接对象  
  101.         HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
  102.         //设置请求超时与请求方式  
  103.         conn.setReadTimeout(5*1000);  
  104.         conn.setRequestMethod("GET");  
  105.         //从链接中获取一个输入流对象  
  106.         InputStream inStream = conn.getInputStream();  
  107.         //调用数据流处理方法  
  108.         byte[] data = StreamTool.readInputStream(inStream);  
  109.         String json = new String(data);  
  110.         //构建JSON数组对象  
  111.         JSONArray array = new JSONArray(json);  
  112.         //从JSON数组对象读取数据  
  113.         for(int i=0 ; i < array.length() ; i++)  
  114.         {  
  115.             //获取各个属性的值  
  116.             JSONObject item = array.getJSONObject(i);  
  117.             int id = item.getInt("id");  
  118.             String title = item.getString("title");  
  119.             int timelength = item.getInt("timelength");  
  120.             //构造的对象加入集合当中  
  121.             videos.add(new Video(id, title, timelength));  
  122.         }  
  123.         return videos;  
  124.     }  
  125. }  

Java代码 
  1. public class StreamTool   
  2. {  
  3.     /** 
  4.      * 从输入流中获取数据 
  5.      * @param inStream 输入流 
  6.      * @return 
  7.      * @throws Exception 
  8.      */  
  9.     public static byte[] readInputStream(InputStream inStream) throws Exception{  
  10.         ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
  11.         byte[] buffer = new byte[1024];  
  12.         int len = 0;  
  13.         while( (len=inStream.read(buffer)) != -1 ){  
  14.             outStream.write(buffer, 0, len);  
  15.         }  
  16.         inStream.close();  
  17.         return outStream.toByteArray();  
  18.     }  
  19. }  

Java代码 
  1. public class MainActivity extends Activity   
  2. {  
  3.     private ListView listView;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState)   
  6.     {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.         //获取到ListView对象  
  10.         listView = (ListView)this.findViewById(R.id.listView);  
  11.         try   
  12.         {  
  13.             //通过  
  14.             List<Video> videos = VideoService.getLastVideos();  
  15.             //通过Json方式获取视频内容  
  16.             //List<Video> videos2 = VideoService.getJSONLastVideos();  
  17.             //  
  18.             List<HashMap<String, Object>> data = new ArrayList<HashMap<String,Object>>();  
  19.             //迭代传入  
  20.             for(Video video : videos)  
  21.             {  
  22.                 //把video中的数据绑定到item中  
  23.                 HashMap<String, Object> item = new HashMap<String, Object>();  
  24.                 item.put("id", video.getId());  
  25.                 item.put("title", video.getTitle());  
  26.                 item.put("timelength", "时长:"+ video.getTime());  
  27.                 data.add(item);  
  28.             }  
  29.             //使用SimpleAdapter处理ListView显示数据  
  30.             SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,   
  31.                     new String[]{"title", "timelength"}, new int[]{R.id.title, R.id.timelength});  
  32.             //  
  33.             listView.setAdapter(adapter);  
  34.         }   
  35.         catch (Exception e)   
  36.         {  
  37.             Toast.makeText(MainActivity.this, "获取最新视频资讯失败", 1).show();  
  38.             Log.e("MainActivity", e.toString());  
  39.         }   
  40.     }  
  41. }  

Android中实现从网络JSON到本地XML转换的完整代码 JSON数据结构主要包括对象(Object)、数组(Array)、字符串(String)、数字(Number)、布尔值(Boolean)和null。JSON对象是由零个或多个键值对(key-value pairs)组成的无序集合,每个键值对之间使用逗号(,)分隔,整个对象被大括号({})包围。键(key)是一个字符串,而值(value)可以是字符串、数字、对象、数组等。例如,以下是一个简单的JSON对象:"age": 30, 阅读详情

相关推荐

安卓网络通信核心技术实现与图片抓取器

本文还有配套的精品资源,点击获取 简介:本压缩包文件整合了安卓应用开发中的关键技术点:JSON、XML、Web Service和UPnP,专注于实现网络通信和图片数据处理。JSON和XML作为数据交换格式,Web Service提供跨系统接口,而UPnP支持设备间的自动发现与通信。提供的“图片抓取器”安卓应用示例,涉及从网络服务请求数据、解析数据格式和利用UPnP协议在设备...

weixin_29069575的博客 1312

android项目,从服务器端返回JSON数据,在android客户端进行显示。

首先使用java代码实现网络的连接。

ShyBoyes的专栏 1638

AndroidJsonEditView:在Android客户端实现JSON编辑

在移动开发中,尤其是Android平台,数据处理是一个常见而重要的需求。随着网络服务的发展,JSON(JavaScript Object Notation)格式因其轻量级和跨语言特性,已成为数据交换的首选格式。今天我们要了解的主角是AndroidJsonEditView控件,它是一个功能强大的JSON数据编辑器,旨在简化Android应用中的JSON数据交互和管理。通过使用AndroidJsonEditView,开发者可以直观地编辑JSON数据,并即时看到效果,极大地提高了开发效率和数据管理的便捷性。

weixin_31800911的博客 1196

android 与servlet json数据交互

android客户 package com.comingx.xzz; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.enti

kim的专栏 2750

从网络获取XML数据并且显示出来

从网络获取XMl数据并在客户端显示出来,包含web应用端和Android客户端以及需要的JAR包。

android访问网络返回的XML数据并且进行解析

android访问网络返回的XML数据并且进行解析演示

Android开发入门之采用JSON格式返回数据给资讯客户端

上一个应用服务器是采用XML格式返回数据给Android客户端的, 这次我们采用JSON格式返回数据给客户端。 ListServlet: package cn.leigo.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import jav

leigo 1404

http请求网络解析xml以及JSON的demo

http请求网络的demo,实现httpUrlConnection与httpClient两种请求方式,并对返回数据进行解析,解析xml和JSON两种格式的数据。

服务器采用JSON格式返回数据给安卓客户端

最近打算做一个酒店无线点餐的APP,需要将图片放在服务器端的文件夹下,客户端通过更新菜单按钮可以获得最新的菜品信息。要获取图片的信息首先需要得到图片的名称、对应的菜品价格以及图片所在的路径,因此需要在服务器端搜索文件夹下的所有图片并将数据打包成JSON格式转发给客户端,具体格式为[{name="菜名",price=价格,path="文件路径",category="菜品分类:如川菜、湘菜等"}]。

小雄bb的专栏 1182

从工创赛实战到开源:一个高鲁棒性智能物流视觉系统的构建与优化

本文分享了从工创赛实战中构建高鲁棒性智能物流视觉系统的完整经验。针对赛场复杂光线环境,详细阐述了摄像头选型、基于CLAHE和形态学梯度的抗干扰色环识别算法、卡尔曼滤波状态估计以及多线程串口通讯与任务调度等核心优化策略,旨在打造一个稳定可靠的视觉系统,并已将相关代码开源。

weixin_29046035的博客 320

Android GNSS 模块分析(三)JNI 层

Android GNSS;定位服务;GPS;NMEA协议;LocationManagerService;导航;

Yang_Mao_Shan的博客 5160

Android之从网络中获取数据并返回客户端的两种方式:XML格式返回与Json格式返回...

1.服务器端代码样例: public class VideoListAction extends Action { private VideoService service = new VideoServiceBean(); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpSer...

编程资料大全 155

白炽灯寿命工程解析:从钨丝蒸发到电压控制的可靠性设计

白炽灯作为一种经典的电光源,其工作原理基于电流通过钨丝产生热辐射发光。在高温下,钨丝会持续蒸发导致灯丝逐渐变细、电阻增大,这是影响其寿命的核心物理机制。从工程角度看,白炽灯的可靠性设计涉及材料科学、热力学和电路设计的交叉,技术价值在于通过理解其失效原理,可以在成本与性能间取得最佳平衡。在实际应用中,电压波动、开关浪涌电流和机械振动是主要寿命杀手,尤其在工业控制、仪器仪表和特定照明场景中,合理的设计能大幅提升系统稳定性。本文深入探讨了钨蒸发、热应力等关键因素,并结合浪涌抑制和降压设计等实战技巧,为工程师提供了

weixin_28684655的博客 570

发送HTTP协议两种方式:OkHttp、HttpURLConnection,在网络传输数据两种格式:XML、JSON

一·、WebView的用法 1、借助WebView可以在自己的应用程序里嵌入一个浏览器,从而轻松的展示各种各样的网页。 2、WebView基本用法 《1》、修改Activity_main.xml中的代码,Android提供了一个WebView控件,借助它我们可以在自己的应用程序里嵌入一个浏览器。用来显示网页。 <LinearLayout xmlns:android="http://schem...

黑色丸子 960

基于Web的智能家居(源码+开题)

实践上,智能家居系统的普及和应用将极大改善人们的居住体验,提高生活质量,同时也有助于促进智能家居产业链的发展和完善,为社会经济发展注入新的活力。此外,本研究还将对基于Web的智能家居系统的用户体验进行深入研究,通过用户调研和数据分析,不断优化系统功能和界面设计,提升用户的使用体验和满意度。针对以上问题,本研究将综合运用物联网、云计算、大数据等新一代信息技术,通过系统架构设计、功能模块开发、安全性保障、用户体验优化等多个方面的研究工作,力求为基于Web的智能家居系统的研发和应用提供全面而有效的解决方案。

sryue06的博客 1904

工程师职级胜任力框架

一、前言 尽管这些年国内的IT行业发展迅速,但是仍然欠缺一套比较综合性的面向工程师的职级胜任力框架,造成国内很多工程师大都一心只想成为技术大牛,而忽视了自己全方位的工程师职业素养和能力的培养。 最近我有幸读到了Circle CI公司分享的工程胜任力矩阵,发现这份文档就是一份比较贴合互联网研发型企业的工程师职级胜任力框架,于是我在它的基础上,重新整理出了一份更适合国内工程师阅读的《工程师职级胜任力框架》,并把它分享在波波的github站点上,希望这份文档对工程师的职业开发和成长有帮助。注,Circle CI.

架构师波波的专栏 6331

Android之网络技术、XML、JSON格式

9.1 WebView (控件之一)的用法 WebView控件可以帮我们在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页。下面我们就来实践一下 然后我们修改MainActivity中的代码: ①这里调用getSettings()方法可以设置一些浏览器的属性,其中setJavaScriptEnabled()方法让WebView支持JavaScript的脚本的; ②调用setWebViewClient()方法并传入一个实例,其作用是:当需要从一个网页跳转到另一个网页时,我们希望目标网页仍然

Cristiano_san的博客 430

SXU—软件测试方法和技术-朱少民-第三部分 软件测试方法大题汇总-附考点和相关习题及解答

软件测试方法和技术-朱少民-第三部分 软件测试方法—-最少测试用例个数,强一般弱一般强健壮、边界值分析、ns流程图、白盒逻辑覆盖代码、等价类划分,逻辑组合(条件)覆盖,计算圈复杂度等—附考点和相关习题及解答

weixin_63597914的博客 2212

XML和JSON

本文主要介绍XML和JSON。内容包括:PULL解析XML,SAX解析XML,JSONObject解析JSON,Gson解析JSON

sywyg 7万+

主成分分析(Principal Component Analysis,PCA)

主成分分析1.主成分分析1.1 降维(Dimensionality Reduction)1.2 均值(Mean)1.3 方差(Variance)1.4 协方差(Covariance)1.5 协方差矩阵(Covariance Matrix)1.6 线性变换(Linear Transformation)1.7 主成分分析(PCA)1.8 PCA和SVD的关系 1.主成分分析 关于PCA的介绍:用最直观的方式告诉你:什么是主成分分析PCA 笔记来源:Principal Component Analysis (PC

一个搬运知识的笨小孩 3230

Backtrader Web:开源量化交易全栈平台

Backtrader Web是一个基于Backtrader框架的现代化量化交易全栈平台,将专业回测引擎与Web技术结合,提供从策略开发到实盘交易的完整解决方案。平台采用FastAPI+Vue3技术栈,具有118个内置策略模板、专业可视化分析工具和完整的策略生命周期管理功能。支持策略版本控制、参数优化、模拟/实盘交易及监控告警,通过RESTful API和WebSocket实现前后端交互。系统采用模块化设计,包含策略服务、回测服务等核心模块,支持SQLite/PostgreSQL等多种数据库。安装简单,5分钟

云金杞 643

Android网络数据Json格式解析

上次我们讲到XML解析网络数据,这次我们来研究研究用Json格式解析数据     照旧,我们先在web端的FQAcgtion.class模拟一组Json格式的数据:  [java] view plain copy print?public String getJson() throws Exception {          // 获取数据          // 调用数据库查询数据,返回对象集合

Super_769的博客 652

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android访问网络系列之--服务端返回XML或JSON格式数据,Android 进行解析并显示

例子说明:用户通过访问web资源的最新电影资讯,服务器端生成XML或JSON格式数据,返回Android客户端进行显示。 此案例开发需要两个方面 WEB开发和android开发. 一.web开发相对比较简单,只是模拟一下 相关代码如下: 1.实体Bean package ygc.yxb.domain; /** * 电影资讯实体Bean * @author YXB * *

lynxzong的专栏 9236

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: android adb常用指令
下一篇: Android Volley网络请求框架 实现post方法并带Map参数上传
meng0911
博客等级 码龄15年 15粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值