• android之JSON 进行网络数据交换


    什么是JSON

            JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同一时候也易于机器解析和生成,很适合于server与client的交互。

    JSON 採用与编程语言无关的文本格式,可是也使用了类C 语言的习惯。这些特性使JSON 成为理想的数据交换格式。

    和 XML 一样,JSON 也是基于纯文本的数据格式。因为 JSON 天生是为 JavaScript 准备的,因此。JSON 的数据格式很easy,您能够用 JSON 传输一个简单的 String,Number。Boolean。也能够传输
    一个数组。或者一个复杂的 Object 对象。String,Number 和 Boolean 用 JSON 表示很easy。

    比如,用 JSON 表示一个简单的字符串

    “ abc ”。其格式为:"abc"。

    除了字符 "。,/ 和一些控制符(。f, 。 , )须要编码外,其它 Unicode 字符能够直接输出。


           Boolean 类型表示为 true 或 false 。

    此外,JavaScript 中的 null 被表示为 null,注意,true、false和 null 都没有双引號,否则将被视为一个 String 。


    JSON 还能够表示一个数组对象,使用 [] 包括全部元素,每一个元素用逗号分隔。元素能够是随意的
    Value。比如,下面数组包括了一个 String,Number。Boolean 和一个 null:

    ["abc",12345,false,null]

    Object 对象在 JSON 中是用 {} 包括一系列无序的 Key-Value 键值对表示的。实际上此处的
    Object 相当于 Java 中的 Map<String, Object>。而不是 Java 的 Class 。注意 Key 仅仅能用 String 表
    示。比如,一个 Address 对象包括例如以下 Key-Value:
                                            city:Beijing
                                             street:Chaoyang Road
                                           postcode:100025(整数)
    用JSON 表演示样例如以下:

           

    {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
    当中 Value 也能够是还有一个 Object 或者数组,因此,复杂的 Object 能够嵌套表示,比如。一个
    Person 对象包括 name 和 address 对象,能够表演示样例如以下:

            

    {"name":"Michael","address":
     {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}
     }


    以下写一个实例:(记得server端要先导包)

         这是在我以前写好的代码上写的。我如今把主要代码写下。

         新建一个servlet:

          

    package cn.four.json;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    
    import javax.print.event.PrintServiceAttributeEvent;
    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;
    import cn.four.service.Foundservice;
    import cn.four.service.FoundserviceImp;
    import cn.four.user.Found;
    
    
    
    public class JSONDemoServlet extends HttpServlet {
    
    	
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		Foundservice fd=new FoundserviceImp();   //我这是曾经写过的。继承接口
    		
    		List<Found> list=fd.getfound();       //new 一个list
    		JSONObject jsb=new JSONObject();      //new 一个JSONObject对象
    		
    		jsb.put("foundlist",list);           //得到转成后的数据
    		
    		JSONArray fdarray=jsb.getJSONArray("foundlist");     //存到数组
    		
    		response.setContentType("text/plain");//解决乱码
    		response.setCharacterEncoding("UTF-8");
    		PrintWriter out=response.getWriter();
    		 out.write(fdarray.toString());   //关闭
    		 out.flush();
    		 out.close();
    		
    	}
    
    	
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		
    	}
    
    }
    
    server端就这样结束了。

    以下是android的介绍

             Android SDK 提供了Apache 的HttpClient 类处理网络訪问,相信非常多读者朋友都在其它项目其中用
    到过HttpClient。我写了一个方法类,获取某一网址的网页内容,代码例如以下:

    package com.four.http;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    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;
    
    public class httpcontent {
    	
    	public String getContent(String url) throws Exception {
    		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(), "UTF-8"), 8192);
    
    			String line = null;
    			while ((line = reader.readLine()) != null) {
    				sb.append(line + "
    ");
    			}
    			reader.close();
    		}
    		return sb.toString();
    }
    
    }
    

    我感觉这就是一个固定的类,仅仅要用到JSON,就能够拿去用。临时没试,不知道对不正确啊。

          

    package com.example.mychat;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    
    import com.four.http.httpcontent;
    
    public class User_tips extends Activity {
    
    	httpcontent content = new httpcontent();
    	private Button btnshua;
    	private ListView xianshi;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_user_tips);
    		btnshua = (Button) findViewById(R.id.btnshua);
    		xianshi = (ListView) findViewById(R.id.listView1);
    		btnshua.setOnClickListener(new shualistener());
    
    	}
    
    	class shualistener implements OnClickListener {
    
    		@Override
    		public void onClick(View v) {
    			// TODO Auto-generated method stub		
    			listxianshi();
    		}
    
    	}
    
    	private List<Map<String, Object>> getmessg(String url) {
    		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    		String body;
    		try {
    			body = content.getContent(url);
    			JSONArray array = new JSONArray(body);
    			for (int i = 0; i < array.length(); i++) {
    				JSONObject obj = array.getJSONObject(i);
    				Map<String, Object> map = new HashMap<String, Object>();
    				map.put("foundname", obj.getString("foundname"));
    				map.put("foundplace", obj.getString("foundplace"));
    				list.add(map);
    			}
    
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return list;
    	}
    
    	private void listxianshi(){
    		try {
    			String url = "http://10.20.180.34:8080/lostfound/JSONDemoServlet";
    			SimpleAdapter adapter = new SimpleAdapter(this,
    					getmessg(url), R.layout.list_item, new String[] {
    							"foundname", "username" }, new int[] {
    							R.id.foundname, R.id.username });
    			xianshi.setAdapter(adapter);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    

    效果图:


  • 相关阅读:
    如何安全的创建线程池?
    【Java Proxy Pattern】Java的代理模式
    php全局变量/局部变量/静态变量
    php strstr()
    微信公众号开发(四):js-sdk的应用
    微信公众号平台开发(三):几大微信接口的调用
    php操作数据库
    微信公众号开发(一)--开发模式与编辑模式
    微信公众平台开发(二):交互与接口
    day6 字典的增减查删
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5118967.html
Copyright © 2020-2023  润新知