• 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=

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

  • 相关阅读:
    ExecuteScalar 返回值问题
    c#中怎么用for循环遍历DataTable中的数据
    select多用户之间通信
    python快速学习6
    python快速学习5
    python快速学习4
    python快速学习3
    python快速学习2
    arm处理器
    软链接与硬链接
  • 原文地址:https://www.cnblogs.com/xuewater/p/2623646.html
Copyright © 2020-2023  润新知