android使用JSON进行网络数据交换_第1页
android使用JSON进行网络数据交换_第2页
android使用JSON进行网络数据交换_第3页
android使用JSON进行网络数据交换_第4页
android使用JSON进行网络数据交换_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用JSON进行网络数据交换网络编程,2021-12-18 17:29:44标签:在开发客户端与效劳端的应用当中,数据交换接口通常都是通过XML格式来进行数据交换的。近年来,随着AJAX技术的兴起,JSON作为一种轻量级的数据交换格式,以其易于阅读和编写的优点,也越 来越多的被使用到各个工程中。在Android SDK中,也提供了JSON的类库方便对JSON格式的数据进行处理。本文将快速讲解JSON格式,并通过代码例如演示如何分另I在客户端和效劳器端进行JSON格式数据的处理。什么是JSONJSON (JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和

2、编写,同时也易于 机器解析和生成,非常适合于效劳器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。和XML一样,JSON也是基于纯文本的数据格式。由于JSON天生是为JavaScript准备的,因此,JSON的数据格式非常简单,您可以用JSON传输一个简单的String , Number , Boolean,也可以传输一个数组,或者一个复杂的Object对象。String , Number和Boolean用JSON表示非常简单。例如,用JSON表示一个简单的字符串“abc,其格式为:abc。除了字符,/和一些控制符(b

3、, f, n, r, t)需要编码外,其他Unicode字符可以直接输出 下列图是一个String的完整表示结构:AOlitiusAOlitiusI/T/TbackspacebackspaceI Iyformf9dyformf9d /、n&wiin&n&wiin&- -taurtaur n nzz tntnFH京口电工整史L L! !y*y*hartzontBihartzontBi tabtab-(.一 一 _-4 4 hexadecima/hexadecima/digitsdigits图I.String的完整表示结构一个Number可以根据整型或浮点数表示如下

4、:图2.Number的表示结构view plaincopy to clipboardprint?这与绝大多数编程语言的表示方法一致,例如:12345整数-3.9e10浮点数Boolean类型表示为true或false。此夕卜,JavaScript中的null被表示为null ,注意,true、false和null都没有双引号,否那么将被视为一个String。JSON还可以表示一个数组对象,使用 口包含所有元素,每个元素用逗号分隔,元素可以是任意的Value ,例如,以下数组包含了一个String , Number, Boolean和一个null:view plaincopy to clipbo

5、ardprint?1. abc ,12345 ,false ,null Object对象在JSON中是用包含一系列无序的Key-Value键值对表示的,实际上此处的Object相当于Java中的MapString, Object,而不是Java的Class。注意Key只能用String表 示。例如,一个Address对象包含如下Key-Value :city:Beijingstreet:Chaoyang Road postcode:100025整数用JSON表示如下:view plaincopy to clipboardprint?1. city : Beijing , street : Ch

6、aoyang Road , postcode : 100025 其中Value也可以是另一个Object或者数组,因此,复杂的Object可以嵌套表示,例如,一个Person对象包含name和address对象,可以表示如下:view plaincopy to clipboardprint?2.name : Michael , address:3. city : Beijing , street : Chaoyang Road ,postcode : 100025 4.一个实际例子接下来,我会通过一个例子来详细说明Android客户端程序如何访问效劳端的接口程序读取用户列表数据,并在模拟器上显

7、示用户列表数据。1、效劳端接口程序首先,我们创立一个名为User的JavaBean作为用户对象类,用来保存演示数据。view plaincopy to clipboardprint?1. public class User 2.privateint id;3.privateString name;4.privateString email;5.privateString gender;6.7.publicint getId() 8.return i id;9.10.publicvoid setId( int id) 11.this.id = id;12.13.publicString getN

8、ame() 14.return i name;15.16.publicvoid setName(String name) 17. = name;18.19.publicString getEmail() 20.return i email;21.22.publicvoid setEmail(String email) 23.this.email = email;24.25.publicString getGender() 26.return i gender;27.28.publicvoid setGender(String gender) 29.this.gender =

9、gender;30.31.32. 接下来, 我们创立一个名为JSONDemoServlet的Servlet类来作为效劳端的接口程序。定义了一个List对象用来保存用户列表。view plaincopy to clipboardprint?1.private List list;在这个程序里,添加用户数据view plaincopy to clipboardprint?客户端程序访问效劳器端接口时,接口通过prepareData方法为用户列表初始化数据,到List对象中。2.private void prepareData()10.接着遍历用户列表,把列表中的每个Java用户对象转换为JSONO

10、bject对象,再参加到JSONArray中去。view plaincopy to clipboardprint?3.JSONArray array = new JSONArray();4.for (User bean:list)5./单个用户JSON对象6.JSONObject obj = new JSONObject();7.8.try 9.obj.put( id , bean.getId();10.obj.put( name,bean.getName();11.obj.put( email,bean.getEmail();12.obj.put(gender, bean.getGender

11、();13. catch (Exception e) 14.15.array.put(obj);16.最后,通过Servlet输出JSON时,需要设置正确的MIME类型和字符编码。假定效劳器使用UTF-8编码,那么可以使用以下代码输出编码后的JSON文本:view plaincopy to clipboardprint?1.response.setContentType( text/plain );2.response.setCharacterEncoding(UTF-8);3.PrintWriter out =response.getWriter();4.out.write(array.to

12、String();5.out.flush();6.out.close();7.8.JSONDemoServlet.java的完整代码如下:9.import java.io.IOException;..list = new ArrayList();User bean1 = new User();bean1.setId( 1001 );bean1.setName( bean1.setEmail( bean1.setGender( list.add(bean1);Tony);male););48.10.import11.importjava.io.PrintWriter;

13、java.util.ArrayList;12. importjava.util.List;13.14. importjavax.servlet.ServletException;15. importjavax.servlet.Servlet;16. importjavax.servlet.ServletRequest;17. importjavax.servlet.ServletResponse;18.19. importorg.json.JSONArray;20. importorg.json.JSONObject;21.22. publicclass JSONDemoServletexte

14、ndsServlet23. private static final long serialVersionUID = -7368225680407826408L;24.privateList list;25.26./*27.*处理post方式提交的数据28.*/29.publicvoid doPost(ServletRequest request,ServletResponse response) throws ServletException, IOException doGet(request,response);/*出来get方式提交的数据*/public void doGet(Serv

15、letRequest request,ServletResp onse response) throws ServletException, IOException 36.response.setContentType(text/plain );37.response.setCharacterEncoding(UTF-8);38.PrintWriter out = response.getWriter();39.40./准备用户数据41.prepareData();42.43./JSON数组44.JSONArray array =new JSONArray();45.for (User bea

16、n:list)46./单个用户JSON对象47.JSONObjectobj =new JSONObject();9.try 50.obj.put(id , bean.getId();51.obj.put(name , bean.getName();52.obj.put(email , bean.getEmail();53.obj.put(gender , bean.getGender();54.catch (Exception e) 55.56.array.put(obj);57.58.59./输出60.out.write(array.toString()

17、;61.out.flush();62.out.close();63.64.private void prepareData()65.list =new ArrayList();66.User bean1 =new User();67.bean1.setId(1001 );68.bean1.setName(Tony);69.bean1.setEmail();70.bean1.setGender(male);71.list.add(bean1);72.73.User bean2 =new User();74.bean2.setId(1002 );75.bean2.setName(Jack);76.

18、bean2.setEmail(jackhotmail);77.bean2.setGender(male);78.list.add(bean2);79.80.User bean3 =new User();81.bean3.setId(1003 );82.bean3.setName(Marry);83.bean3.setEmail(marry163);84.bean3.setGender(female);85.list.add(bean3);86.87.User bean4 =new User();88.bean4.setId(1004 );89.bean4.setName(Linda);90.b

19、ean4.setEmail(linda21cn);91.bean4.setGender(female);92.list.add(bean4);93.94.把该Servlet部署到Tomcat下,在浏览器输入接口地址:localhost:8080/article/JSONDemoServlet,输出结果如下:id:1001,email: ,name:Tony,gender:male,id:1002,email:,name:Jack,gender:male,id:1003,email:marry163,name:Marry,gender:female,id:1004,email:linda21cn

20、,name:Linda,gender:female 2、客户端程序准备好效劳端的接口后,接下来就是准备写客户端的程序了。翻开Eclipse新建一个Android工程。我们创立一个名为MainActivity的Activity类,如下列图所示:二JSOHDsmo-src-l 4- net tQ电jSQudemQl+l Jj MiiiiAciiVLty. jgengen GeHerGeHer atat -ed-ed JavaJava FilesFilesAndroid 1. 5AikirAikir iLlMiLlM amam st.st. xmxmd d餐f f wXtwXt. . proppro

21、p ertierti eses因 为 要 访 问 外 部 网 络 , 所 以 要 在AndroidManifest.xml文 件 里 增 加 一 行 平 安 许 可 :这样我们的应用程序就可以访问网络了。接着修改布局文件reslayoutmain.xml,增加一个TextView对象,用来显示解析后的用户数据。view plaincopy to clipboardprint?1.0 encoding= utf-8 ?1. 6.9.Android SDK提供了Apache的Client类处理网络访问,相信很多读者朋友都在其他工程当中用 到过Client。我写了一个方法,获取某一网址的网页内容,代

22、码如下:view plaincopy to clipboardprint?/*获取网址内容*param url*return*throws Exception*/private String getContent(String url)throws Exception8.StringBuilder sb =new StringBuilder();9.10.Client client =new DefaultClient();11.ParamsParams= client.getParams();12./设置网络超时参数13.ConnectionParams.setConnectionTimeout(Params,3000 );14.ConnectionPara

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论