什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。
和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
Json_lib可以方便的将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将Json字符串转换成Java对象,或者将xml字符串转换成Java对象。
官网:http://json-lib.sourceforge.net/
JSON在线转换:http://json.parser.online.fr/
JSON教程:http://www.json.org/json-zh.html
官网上说明了json_lib还需要依赖的Jar包有:
JAR |
网址 |
jakarta commons-lang 2.5 |
|
jakarta commons-beanutils 1.8.0 |
|
jakarta commons-collections 3.2.1 |
http://commons.apache.org/collections/download_collections.cgi |
jakarta commons-logging 1.1.1 |
|
ezmorph 1.0.6 |
首先创建一个Web项目ServletTest
1:我们创建一个名为User的JavaBean作为用户对象类,用来保存演示数据
package com.android.servlet; public class User { private int id; private String name; private String email; private String gender; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
2:我们创建一个ServletDemo的Servlet类作为服务器的接口程序
package com.android.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class ServletDemo extends HttpServlet { private static final long serialVersionUID=5451751140414610383l; private List<User> list; //处理get方式提交的数据 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain"); resp.setCharacterEncoding("UTF-8"); PrintWriter out=resp.getWriter(); //准备用户数据 prepareData(); //JSON数组 JSONArray array=new JSONArray(); for(User bean:list){ //单个用户JSON对象 JSONObject obj=new JSONObject(); try{ obj.put("id",bean.getId()); obj.put("name", bean.getName()); obj.put("email", bean.getEmail()); obj.put("gender", bean.getGender()); }catch (Exception e) { // TODO: handle exception } array.add(obj); } //输出 out.write(array.toString()); out.flush(); out.close(); } //处理post方式提交的数据 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } private void prepareData(){ list=new ArrayList<User>(); User bean1=new User(); bean1.setId(1001); bean1.setName("litong1"); bean1.setEmail("1001@163.com"); bean1.setGender("male"); list.add(bean1); User bean2=new User(); bean1.setId(1002); bean1.setName("litong2"); bean1.setEmail("1002@163.com"); bean1.setGender("male"); list.add(bean1); User bean3=new User(); bean1.setId(1003); bean1.setName("litong3"); bean1.setEmail("1003@163.com"); bean1.setGender("male"); list.add(bean1); } }
3:把该Servlet部署到Tomcat下,发布项目需要修改web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ServletDemo</servlet-name> <servlet-class>com.android.servlet.ServletDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo</servlet-name> <url-pattern>/ServletDemo</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
4:发布成功后,在浏览器输入地址http://localhost:8080/ServletTest/ServletDemo,输出如下结果:
[{"id":1003,"email":"1003@163.com","name":"litong3","gender":"male"},{"id":1003,"email":"1003@163.com","name":"litong3","gender":"male"},{"id":1003,"email":"1003@163.com","name":"litong3","gender":"male"}]
5:准备好服务器的接口后,我们准备写客户端的程序,创建一个android项目
我们创建一个名为JSONActivity的Activity类
首先我们修改UI布局layout/main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
6:实现客户端获取网络数据的核心代码:
package com.android.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.json.JSONArray; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try{ StringBuffer sb=new StringBuffer(); //在测试过程中,经常是用本机做测试服务器,访问本机的IP地址要设置为10.0.2.2 String url="http://10.0.2.2:8080/ServletTest/ServletDemo"; String body=getContent(url); JSONArray array=new JSONArray(body); for(int i=0;i<array.length();i++){ JSONObject obj=array.getJSONObject(i); sb.append("id:").append(obj.getString("id")).append("\t"); sb.append("name:").append(obj.getString("name")).append("\t"); sb.append("email:").append(obj.getString("email")).append("\t"); sb.append("gender:").append(obj.getString("gender")).append("\t"); sb.append("------\n"); } TextView textView=(TextView)findViewById(R.id.textView); textView.setText(sb.toString()); }catch(Exception e){ e.printStackTrace(); } } private String getContent(String url) throws ClientProtocolException, IOException{ StringBuilder sb=new StringBuilder(); HttpClient client=new DefaultHttpClient(); HttpParams httpParams=client.getParams(); //社会自网络超时参数 HttpConnectionParams.setConnectionTimeout(httpParams, 3000); HttpConnectionParams.setSoTimeout(httpParams, 5000); HttpResponse response=client.execute(new HttpGet(url)); HttpEntity entity=response.getEntity(); if(entity!=null){ BufferedReader reader=new BufferedReader(new InputStreamReader(entity.getContent())); String line=null; while((line=reader.readLine())!=null){ sb.append(line+"\n"); } reader.close(); } return sb.toString(); } }
因为要访问外部网络,所以要子啊AndroidManifest.xml文件里增加一行安全许可:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。
和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。
首先创建一个Web项目ServletTest
1:我们创建一个名为User的JavaBean作为用户对象类,用来保存演示数据
2:我们创建一个ServletDemo的Servlet类作为服务器的接口程序
3:把该Servlet部署到Tomcat下,发布项目需要修改web.xml
4:发布成功后,在浏览器输入地址http://localhost:8080/ServletTest/Test,输出如下结果:
5:准备好服务器的接口后,我们准备写客户端的程序,创建一个android项目
我们创建一个名为JSONActivity的Activity类
首先我们修改UI布局layout/main.xml
6:实现客户端获取网络数据的核心代码:
因为要访问外部网络,所以要子啊AndroidManifest.xml文件里增加一行安全许可:
运行程序如图:
到此这个程序就算写完了,还可以实现更复杂的功能