Android JSON网络数据交换

什么是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

http://commons.apache.org/lang/download_lang.cgi

jakarta commons-beanutils 1.8.0

http://commons.apache.org/beanutils/download_beanutils.cgi

jakarta commons-collections 3.2.1

http://commons.apache.org/collections/download_collections.cgi

jakarta commons-logging 1.1.1

http://commons.apache.org/logging/download_logging.cgi

ezmorph 1.0.6

http://ezmorph.sourceforge.net/

 

 

 

 

 

 

 

 

 

 

 

首先创建一个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作为用户对象类,用来保存演示数据

\" border=

2:我们创建一个ServletDemo的Servlet类作为服务器的接口程序

\" border=

3:把该Servlet部署到Tomcat下,发布项目需要修改web.xml

\" border=

4:发布成功后,在浏览器输入地址http://localhost:8080/ServletTest/Test,输出如下结果:\" border=

\" border=

5:准备好服务器的接口后,我们准备写客户端的程序,创建一个android项目

我们创建一个名为JSONActivity的Activity类

首先我们修改UI布局layout/main.xml

\" border=

6:实现客户端获取网络数据的核心代码:

 

\" border=

因为要访问外部网络,所以要子啊AndroidManifest.xml文件里增加一行安全许可:

\" border=

运行程序如图:

\" border=

到此这个程序就算写完了,还可以实现更复杂的功能

 

posted @ 2012-08-05 10:00  water0504  阅读(311)  评论(0编辑  收藏  举报