第八章 网络的时代—网络开发(4)

8.5轻量级的数据交换格式—JSON

8.5.1 client与server端的数据交互

在Android应用开发中,尤其是网络应用的开发,我们常常须要从网络上获取数据,而不只从本地数据库或者本地文件里取得数据,这个时候就涉及到client与server端的数据交互了。client怎样须要与server端进行数据交互。就须要约定一种协议或者是数据交换格式。

那么一般的。Androidclient与server端进行数据交互有哪些方式呢?依据业务需求的不同,可能会选用不用的方式,通常有以下几种方式。

1)基于SOAP的Web服务(WebService)方式

Web服务是一种面向服务的架构的技术,通过标准的Web协议提供服务。目的是保证不同平台的应用服务能够互操作。

依据W3C的定义,Web服务应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务一般是很多应用程序接口所组成的,它们通过网络,比如国际互联网的远程server端。运行客户所提交服务的请求。

Web服务是基于XML和HTTPS的一种服务,其通信协议主要基于SOAP。通过WSDL来描写叙述服务,通过UDDI来发现和获得服务的元数据。

2)自己定义XML数据格式的方式

除了使用标准的SOAP协议以外。项目组还能够自己定义XML数据格式用来传递数据。

比方项目能够约定例如以下XML格式。用来传递用户的数据信息。


<request>

<type>1</type>

<id>100000</id>

<name>jname</name>

<state>1</state>

……

</request>

3)JSON数据格式

JSON(JavascriptObjectNotation)是一种轻量级的资料交换语言。以文字为基础,且易于让人阅读。虽然JSON是在Javascript的一个子集。但JSON是独立于语言的文本格式,能够使用于不论什么语言。

JSON用于描写叙述数据结构。有以下形式存在。

对象(object):一个对象以“{”開始,并以“}”结束。一个对象包括一系列非排序的名称/值对。每一个名称/值对之间使用“。”切割。

名称/值对(collection):名称和值之间使用“:”隔开。一般的形式是:

{name:value}

一个名称是一个字符串。一个值能够是一个字符串,一个数值,一个对象,一个布林值,一个有序列表。或者一个null值。

值的有序列表(Array):一个或者多个值用“,”切割后。使用“[”,“]”括起来就形成了这种列表。形如:

[collection,collection]

字符串:以""括起来的一串字符。

数值:一系列0-9的数字组合,能够为负数或者小数。还能够用“e”或者“E”表示为指数形式。

布尔值:表示为true 或者false。

以下的样例就能够清晰的说明JSON格式的结构。


{

"firstName":"John",

"lastName":"Smith",

"male":true,

"age":25,

"address":

{

"streetAddress":"21 2nd Street",

"city":"New York",

"state":"NY",

"postalCode":"10021"

},

"phoneNumber":

[

{

"type":"home",

"number":"212 555-1234"

},

{

"type":"fax",

"number":"646 555-4567"

}

]

}

8.5.2 XML格式与JSON格式的比較

不管是Web服务的方式。还是自己定义XML的方式,都是以XML格式为基础的。现在JSON数据格式已经在网络开发中越来越流行了,在非常多场合都能够代替XML格式。这主要是由于JSON更适合网络数据的传输。那么。详细的,JSON数据格式与XML数据格式相比較,都有哪些优缺点呢。

使用XML作为传输格式的优势:

1)格式统一,符合标准。

2)easy与其它系统进行远程交互,数据共享比較方便。

使用XML格式的缺点:

1)XML文件格式文件庞大。格式复杂。传输占用带宽。

2)server端和client都须要花费大量代码来解析XML,不论server端和client代码变的异常复杂和不easy维护。

3)client不同浏览器之间解析XML的方式不一致,须要反复编写非常多代码。

4)server端和client解析XML花费资源和时间。

使用JSON格式的长处:

1)数据格式比較简单,易于读写。格式都是压缩的。占用带宽小。

2)易于解析这种语言。clientJavaScript能够简单的通过eval()进行JSON数据的读取。

3)支持多种语言。包括ActionScript、C、C#、ColdFusion、Java、JavaScript、Perl、PHP、Python、Ruby等语言server端语言。便于server端的解析。

4)在PHP世界,已经有PHP-JSON和JSON-PHP出现了,便于PHP序列化后的程序直接调用。PHPserver端的对象、数组等能够直接生JSON格式。便于client的訪问提取。

5)由于JSON格式能够直接为server端代码使用。大大简化了server端和client的代码开发量。可是完毕的任务不变,且易于维护。

使用JSON格式的缺点:

1)没有XML格式这么推广的深入人心和使用广泛,没有XML那么通用性。

2)JSON格式眼下在WebService中推广还属于0基础阶段。

通过上面的对照我们能够看出。JSON是一种轻量级的数据交换格式。具有良好的可读和便于高速编写的特性,能够在不同平台间进行数据交换。为了节省内存,提高响应速度,在Android网络应用的开发中比較适合使用JSON格式。

8.5.3 解析JSON格式数据

AndroidSDK有一个包直接支持JSON格式的数据解析。都在org.json下,主要有以下几个类:

1)JSONObject

能够看作是一个JSON对象。这是系统中有关JSON定义的基本单元,其包括一对儿(Key/Value)数值。

2)JSONStringer

JSON文本构建类,依据官方的解释,这个类能够帮助高速和便捷的创建JSONtext。其最大的长处在于能够降低由于格式的错误导致程序异常。引用这个类能够自己主动严格依照JSON语法规则(syntaxrules)创建JSONtext。每一个JSONStringer实体只能相应创建一个JSONtext。

3)JSONArray

它代表一组有序的数值。

将其转换为String输出所表现的形式是用方括号包裹,数值以逗号”,”分隔(比如:[value1,value2,value3],大家能够亲自利用简短的代码更加直观的了解其格式)。

4)JSONTokener

JSON解析类。

5)JSONException

JSON解析过程中可能发生的异常。

以下我们就通过代码来说明怎样在Android中对JSON数据进行解析。

假设我们已经能够从server端获取数据了。并且返回的JSON数据例如以下:


{"FLAG":"flag",

"jobject":[

{"id":"100000","name":"jname","state":1},

{"id":"200000","name":"jname","state":2}]}

以下的代码片段举例说明怎样解析出FLAG对象和jobject对象。


/**

*对JSON格式数据进行解析

*/

publicvoid readJSON(String str){

try{

//转换为JSONObject

JSONObjectresult = new JSONObject(str);

Log.d("readJSON","FLAG = " + result.getString("FLAG"));

//获取JSONArray数组

JSONArrayjsonArray = result.getJSONArray("jobject");

Log.d("readJSON","Numberof entries " + jsonArray.length());

for(int i = 0; i < jsonArray.length(); i++) {

JSONObjectjsonObject = jsonArray.getJSONObject(i);

Log.d("readJSON","id= " + jsonObject.getString("id"));

Log.di("readJSON","name= " + jsonObject.getString("name"));

Log.d("readJSON","state= " + jsonObject.getString("state"));

}

}catch (Exception e) {

e.printStackTrace();

}

}

以下的代码片段说明了怎样简单的构造一个JSON串。


/**

*构造一个JSON格式的数据

*/

publicString writeJSON() {

JSONObjectobject = new JSONObject();

try{

object.put("id","100000");

object.put("name","jname");

object.put("state",new Integer(1));

}catch (JSONException e) {

e.printStackTrace();

}

Log.d("writeJSON",object.toString());

returnobject.toString();

}

构造好的JSON串能够通过POST方式发送给server端,server端再进行解析,运行兴许的业务流程。

图8-4展示了上面的演示样例代码的运行结果。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" />

图8-4JSON读写结果图

通过上面的样例能够看出,在Android开发中,使用JSON格式的数据与server端交互还是非常方便的。


经验分享:

不管是採用JSON格式。还是自己定义XML格式,client与server端传输的数据都是明文的,这样并不安全。所以,假设项目对数据安全性有一定的要求。务必要考虑做下加密解密的工作。

另外,由于Android的APK包非常easy被反编译,假设单纯的使用Java来实现加密解密的代码,就非常easy泄露详细算法。

所以,假设项目中涉及到加密解密的操作,能够考虑使用JNI方式去做,这样被破解的可能性就小非常多了。

时间: 2024-12-07 06:13:29

第八章 网络的时代—网络开发(4)的相关文章

第八章 网络的时代—网络开发(2)

8.3基于最成熟的Web协议-HTTP协议编程 8.3.1 HTTP协议简单介绍 超文本传输协定(HTTP.HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议. 全部的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种公布和接收HTML页面的方法. HTTP是一个client和server端请求和应答的标准(TCP).client是终端用户,server端是站点.通过使用Web浏览器.网络爬虫或者其它的工具,client发起一个到server

第八章 网络的时代—网络开发(3)

8.4耗时操作的通用方式-多线程与异步处理 Android通过一个主线程对用户界面进行更新,这个线程是UI线程.如果程序不使用任何并发构建.Android的所有代码都会在这个线程中运行.当我们在进行网络连接等比较耗时的操作时,如果此连接动作直接在主线程,也就是UI线程中处理,会发生什么情况呢?整个程序处于等待状态,界面似乎是"假死"掉了.如果5秒钟以上没有响应,系统就会弹出对话框提示是否要强制关闭应用.为了给用户更好的用户体验,必须把这个任务放置到单独线程中运行,避免阻塞UI线程,这样

微信营销是网络经济时代企业对营销模式的创新

小微信,大商机 ·截止目前,中国手机用户已经突破12亿,微信用户已经突破6亿! ·如果你错过了10年前的互联网,就不应该错过电子商务! ·如果你错过了5年前电子商务,就不要再错过移动互联网! ·微信已经成为移动互联网上的"超级入口"! ·微信时代,蕴藏着移动互联网的巨大商机! ·        案例1:小米开通微信商城,短短9分55秒,15万台小米手机3即被抢购一空! ·        案例2:杭州某知名服装品牌女装网店近1/3销量订单在微信上成交! ·        案例3:广州三名

2019.03.30 云计算和大数据时代网络技术揭秘

云计算  大数据   时代 来源<云计算和大数据时代网络技术揭秘> 第一章 云计算的兴起 云计算的本质是一种服务提供模型,通过这种模型可以随时,随地,按需地通过网络访问共享资源池的资源,这个资源池的内容包括计算资源,网络资源,存储资源等,这些资源你能够被动态的分配和调整,在不同用户之间灵活的划分.范式符合这些特征的IT服务都可以称为云计算服务 为了能将这个定义更方便的匹配到显示世界的IT架构中: IaaS 通过虚拟化技术奖服务器等计算平台同存储和网络资源打包,通过API接口的形式提供给用户.用

【大数据】大数据时代--网络数据与科学的时代

大数据_大数据时代_大数据概念_网络大数据 随着大数据时代的来临,大数据也吸引了越来越多的关注.网络大数据(http://www.raincent.com)整合了大数据,大数据概念,大数据处理,大数据分析,cdn,cdn加速,idc,网络测量,网络监测,网络安全测量,网站性能监测,行业分析报告,行业研究报告,免费行业报告等服务为一体,力争打造中国最大的网络大数据中心. 这两个词最早出现是在上世纪90年代.按照当时的解释,大科学时代主要是指单打独斗的时代结束了,要搞集团军式的科研.也有一种说法是,

网络小助手项目开发总结报告

网络小助手项目开发总结报告 1引言 1.1编写目的 通过一段时间后对网络小助手项目进行详细开发和测试,该项目已经基本完成.本报告旨在将项目开发过程中的经验和不足之处进行总结,为以后的团队开发活动积累经验.本报告经审核后,交由软件工程老师王老师审查. 1.2背景 说明: a.  软件项目名称:网络小助手 b.  开发者:兰梦,李金吉,马翔,赵天,胡佳奇 用户:学生 系统运行环境:windows XP/windows 7/windows 8下的通用PC 1.3参考资料 <软件工程--原理,方法与应用

通过nfs网络文件系统启动tiny6410开发板时uboot启动参数的设置 &nbsp;

通过nfs网络文件系统启动tiny6410开发时uboot启动参数应该设置为: console=ttySAC0 lcd=S70 root=/dev/nfs nfsroot=192.168.1.30:/opt/tiny6410/fs/rootfs_mini6410 ip=192.168.1.40:192.168.1.30:192.168.1.30:255.255.255.0:tiny6410:eth0:off 注意:这里一定要指明你的lcd的类型,不然通过nfs成功启动tiny6410时,你的lc

Unity网络多玩家游戏开发教程第1章Unity自带网络功能

Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件,专门提供了对网络功能的支持.但是,大部分开发者第一次接触到的还是Unity自带的网络功能,也就是大家经常说到的Unity Networking API.这些API是借助于组件NetworkView发挥作用的,而它可以简化开发者大量的网络功能编码任务.本文选自<Unity网络多玩家游戏开发教程(大学霸内部资料)> NetworkView组件 在Unity中,NetworkView组件用于处理游戏在网络上

网络支付区块链开发,搭建区块链支付平台

随着区块链支付的发展,区块链分布式账本技术将区块链上数字资.产流动与现实的现.金支付相连接.在全球互联网市场上能够发挥出传统金融机构无法替代的高效率.低成本的价值传递的作用.每个人的密码钱.包就可以发展成一个"自.金.融"平台,可以用于P.2.P 的支.付.存.款.转.账.换.汇.借.贷以及全.网.记.账.清.算.支付是金.融交易中必不可少的一个环节.在信息技术和金融业务不断融合的大趋势下,网络支付体系和网络支付的方法发生了深刻的变化,网络支付的理论和实践正在向泛中心化的网络支付聚焦,