Android网络开发中如何使用JSON进行网络通信Android JSON数据通讯方法解析.docx
- 文档编号:18105591
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:20
- 大小:20.69KB
Android网络开发中如何使用JSON进行网络通信Android JSON数据通讯方法解析.docx
《Android网络开发中如何使用JSON进行网络通信Android JSON数据通讯方法解析.docx》由会员分享,可在线阅读,更多相关《Android网络开发中如何使用JSON进行网络通信Android JSON数据通讯方法解析.docx(20页珍藏版)》请在冰点文库上搜索。
Android网络开发中如何使用JSON进行网络通信AndroidJSON数据通讯方法解析
Android网络开发中如何使用JSON进行网络通信---AndroidJSON数据通讯方法解析
Android网络开发中如何使用JSON进行网络通信---AndroidJSON数据通讯方法解析
在开发客户端与服务端的应用当中,数据交换接口通常都是通过XML格式来进行数据交换的。
近年来,随着AJAX技术的兴起,JSON作为一种轻量级的数据交换格式,以其易于阅读和编写的优点,也越来越多的被使用到各个项目中。
在OPhoneSDK中,也提供了JSON的类库方便对JSON格式的数据进行处理。
本文将快速讲解JSON格式,并通过代码示例演示如何分别在客户端和服务器端进行JSON格式数据的处理。
什么是JSON
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。
JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。
和XML一样,JSON也是基于纯文本的数据格式。
由于JSON天生是为JavaScript准备的,因此,JSON的数据格式非常简单,您可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object对象。
String,Number和Boolean用JSON表示非常简单。
例如,用JSON表示一个简单的字符串“abc”,其格式为:
"abc"。
除了字符",\,/和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他Unicode字符可以直接输出。
下图是一个String的完整表示结构:
图1.String的完整表示结构
一个Number可以根据整型或浮点数表示如下:
图2.Number的表示结构
这与绝大多数编程语言的表示方法一致,例如:
12345(整数)
-3.9e10(浮点数)
Boolean类型表示为true或false。
此外,JavaScript中的null被表示为null,注意,true、false和null都没有双引号,否则将被视为一个String。
JSON还可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以是任意的Value,例如,以下数组包含了一个String,Number,Boolean和一个null:
1.["abc",12345,false,null]
["abc",12345,false,null]Object对象在JSON中是用{}包含一系列无序的Key-Value键值对表示的,实际上此处的Object相当于Java中的Map
注意Key只能用String表示。
例如,一个Address对象包含如下Key-Value:
city:
Beijing
street:
ChaoyangRoad
postcode:
100025(整数)
用JSON表示如下:
1.{"city":
"Beijing","street":
"ChaoyangRoad","postcode":
100025}
{"city":
"Beijing","street":
"ChaoyangRoad","postcode":
100025}其中Value也可以是另一个Object或者数组,因此,复杂的Object可以嵌套表示,例如,一个Person对象包含name和address对象,可以表示如下:
1.{"name":
"Michael","address":
2.{"city":
"Beijing","street":
"ChaoyangRoad","postcode":
100025}
3.}
{"name":
"Michael","address":
{"city":
"Beijing","street":
"ChaoyangRoad","postcode":
100025}
}
一个实际例子
接下来,我会通过一个例子来详细说明OPhone客户端程序如何访问服务端的接口程序读取用户列表数据,并在模拟器上显示用户列表数据。
1、服务端接口程序
首先,我们创建一个名为User的JavaBean作为用户对象类,用来保存演示数据。
1.publicclassUser{
2.privateintid;
3.privateStringname;
4.privateStringemail;
5.privateStringgender;
6.
7.publicintgetId(){
8.returnid;
9.}
10.publicvoidsetId(intid){
11.this.id=id;
12.}
13.publicStringgetName(){
14.returnname;
15.}
16.publicvoidsetName(Stringname){
17.this.name=name;
18.}
19.publicStringgetEmail(){
20.returnemail;
21.}
22.publicvoidsetEmail(Stringemail){
23.this.email=email;
24.}
25.publicStringgetGender(){
26.returngender;
27.}
28.publicvoidsetGender(Stringgender){
29.this.gender=gender;
30.}
31.
32.}
publicclassUser{
privateintid;
privateStringname;
privateStringemail;
privateStringgender;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetGender(){
returngender;
}
publicvoidsetGender(Stringgender){
this.gender=gender;
}
}
接下来,我们创建一个名为JSONDemoServlet的Servlet类来作为服务端的接口程序。
在这个程序里,定义了一个List对象用来保存用户列表。
1.privateList
privateList
1.privatevoidprepareData(){
2.list=newArrayList
3.Userbean1=newUser();
4.bean1.setId(1001);
5.bean1.setName("Tony");
6.bean1.setEmail("tony@");
7.bean1.setGender("male");
8.list.add(bean1);
9.……
10.}
privatevoidprepareData(){
list=newArrayList
Userbean1=newUser();
bean1.setId(1001);
bean1.setName("Tony");
bean1.setEmail("tony@");
bean1.setGender("male");
list.add(bean1);
……
}
接着遍历用户列表,把列表中的每个Java用户对象转换为JSONObject对象,再加入到JSONArray中去。
1.JSONArrayarray=newJSONArray();
2.for(Userbean:
list){
3.//单个用户JSON对象
4.JSONObjectobj=newJSONObject();
5.
6.try{
7.obj.put("id",bean.getId());
8.obj.put("name",bean.getName());
9.obj.put("email",bean.getEmail());
10.obj.put("gender",bean.getGender());
11.}catch(Exceptione){}
12.
13.array.put(obj);
14.}
JSONArrayarray=newJSONArray();
for(Userbean:
list){
//单个用户JSON对象
JSONObjectobj=newJSONObject();
try{
obj.put("id",bean.getId());
obj.put("name",bean.getName());
obj.put("email",bean.getEmail());
obj.put("gender",bean.getGender());
}catch(Exceptione){}
array.put(obj);
}
最后,通过Servlet输出JSON时,需要设置正确的MIME类型和字符编码。
假定服务器使用UTF-8编码,则可以使用以下代码输出编码后的JSON文本:
1.response.setContentType("text/plain");
2.response.setCharacterEncoding("UTF-8");
3.PrintWriterout=response.getWriter();
4.out.write(array.toString());
5.out.flush();
6.out.close();
7.
8.JSONDemoServlet.java的完整代码如下:
9.importjava.io.IOException;
10.importjava.io.PrintWriter;
11.importjava.util.ArrayList;
12.importjava.util.List;
13.
14.importjavax.servlet.ServletException;
15.importjavax.servlet.http.HttpServlet;
16.importjavax.servlet.http.HttpServletRequest;
17.importjavax.servlet.http.HttpServletResponse;
18.
19.importorg.json.JSONArray;
20.importorg.json.JSONObject;
21.
22.publicclassJSONDemoServletextendsHttpServlet{
23.privatestaticfinallongserialVersionUID=-7368225680407826408L;
24.privateList
25.
26./**
27.*处理post方式提交的数据
28.*/
29.publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
30.doGet(request,response);
31.}
32./**
33.*出来get方式提交的数据
34.*/
35.publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
36.response.setContentType("text/plain");
37.response.setCharacterEncoding("UTF-8");
38.PrintWriterout=response.getWriter();
39.
40.//准备用户数据
41.prepareData();
42.
43.//JSON数组
44.JSONArrayarray=newJSONArray();
45.for(Userbean:
list){
46.//单个用户JSON对象
47.JSONObjectobj=newJSONObject();
48.
49.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(Exceptione){}
55.
56.array.put(obj);
57.}
58.
59.//输出
60.out.write(array.toString());
61.out.flush();
62.out.close();
63.}
64.privatevoidprepareData(){
65.list=newArrayList
66.Userbean1=newUser();
67.bean1.setId(1001);
68.bean1.setName("Tony");
69.bean1.setEmail("tony@");
70.bean1.setGender("male");
71.list.add(bean1);
72.
73.Userbean2=newUser();
74.bean2.setId(1002);
75.bean2.setName("Jack");
76.bean2.setEmail("jack@");
77.bean2.setGender("male");
78.list.add(bean2);
79.
80.Userbean3=newUser();
81.bean3.setId(1003);
82.bean3.setName("Marry");
83.bean3.setEmail("marry@");
84.bean3.setGender("female");
85.list.add(bean3);
86.
87.Userbean4=newUser();
88.bean4.setId(1004);
89.bean4.setName("Linda");
90.bean4.setEmail("linda@");
91.bean4.setGender("female");
92.list.add(bean4);
93.}
94.}
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
PrintWriterout=response.getWriter();
out.write(array.toString());
out.flush();
out.close();
JSONDemoServlet.java的完整代码如下:
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.ArrayList;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.json.JSONArray;
importorg.json.JSONObject;
publicclassJSONDemoServletextendsHttpServlet{
privatestaticfinallongserialVersionUID=-7368225680407826408L;
privateList
/**
*处理post方式提交的数据
*/
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
doGet(request,response);
}
/**
*出来get方式提交的数据
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
PrintWriterout=response.getWriter();
//准备用户数据
prepareData();
//JSON数组
JSONArrayarray=newJSONArray();
for(Userbean:
list){
//单个用户JSON对象
JSONObjectobj=newJSONObject();
try{
obj.put("id",bean.getId());
obj.put("name",bean.getName());
obj.put("email",bean.getEmail());
obj.put("gender",bean.getGender());
}catch(Exceptione){}
array.put(obj);
}
//输出
out.write(array.toString());
out.flush();
out.close();
}
privatevoidprepareData(){
list=newArrayList
Userbean1=newUser();
bean1.setId(1001);
bean1.setName("Tony");
bean1.setEmail("tony@");
bean1.setGender("male");
list.add(bean1);
Userbean2=newUser();
bean2.setId(1002);
bean2.setName("Jack");
bean2.setEmail("jack@");
bean2.setGender("male");
list.add(bean2);
Userbean3=newUser();
bean3.setId(1003);
bean3.setName("Marry");
bean3.setEmail("marry@");
bean3.setGender("female");
list.add(bean3);
Userbean4=newUser();
bean4.setId(1004);
bean4.setName("Linda");
bean4.setEmail("linda@");
bean4.setGender("female");
list.add(bean4);
}
}
把该Servlet部署到Tomcat下,在浏览器输入接口地址http:
//localhost:
8080/article/JSONDemoServlet,输出结果如下:
[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android网络开发中如何使用JSON进行网络通信Android JSON数据通讯方法解析 Android 网络 开发 如何 使用 JSON 进行 通信 数据通讯 方法 解析
链接地址:https://www.bingdoc.com/p-18105591.html