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"。

除了字符 "。\,/ 和一些控制符(\b。\f,\n。\r,\t)须要编码外,其它 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 + "\n");
			}
			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();
		}
	}
}

效果图:

时间: 2025-01-01 23:18:51

android之JSON 进行网络数据交换的相关文章

Android之使用json进行网络数据交换

JSON作为一种轻量级的数据交换格式,凭借其易于阅读和编写.易于解析.传输速度快等优点流行了起来.最近正好在学习Android端从服务端端取数据,Json便派上了用场.好,下面开始切入主题. 1.准备好服务端 首先我们要有个服务器,我用的是Tomcat7.0,这里具体Tomcat的安装过程我就不加以描述了.服务器配置过程如下. 我们在File-new -other中找到server,next然后在Apache中找到tomcat7.0,我这里将server的名字改为了Myserve,点击finis

Android读写JSON格式的数据之JsonWriter和JsonReader

最近的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.最近打算找一份Android的工作,要继续拾起以前的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才开始办公.不说这些了,下面开始今天的正文. JSON格式的数据通常用于网络传输,尤其是在移动设备上与服务端进行数据交互.JSON与XML比较有明显的优势.XML格式的数据非常臃肿,传递少量的数据就要附带很多额外的格式数据.而JSON除了少量的符号外,全部是真正的数据,所以有越来越多的程序用JSON来取代XM

JQuery + JSON作为前后台数据交换格式实践

JQuery + JSON作为前后台数据交换 JQuery提供良好的异步加载接口AJAX,可以局部更新页面数据, http://api.jquery.com/category/ajax/ JSON作为一种轻量数据格式,被浏览器js引擎普遍支持,同xml格式. 使用AJAX+JSON数据格式来实现动态页面,有以下好处: 1. 松耦合, 页面HTML和数据彻底分离, 即表示层 和 数据层分开, 有利前台样式定制. 不同于以往后台脚本嵌套HTML标签,并输出数据到标签的合适位置, 来实现动态页面,表示

Android 界面跳转及数据交换

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/40015757 本文演示:Android 界面跳转及数据交换,通过一个小Demo展示全部过程. 效果如下所示: 1)MainActivity.java package doogle.xian.bundletest; import android.app.Activity; import android.content.Intent; import android.os.Bund

Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】

主要介绍Android及IPhone手机上如何利用Fiddler进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. Mac 下请使用 Charles 代替 Fiddler. 相对于tcpdump配合wireshark抓包的优势在于:(1)无需root (2)对Android和Iphone同样适用 (3)操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4)数据包的查看更清晰易懂,Fiddler的UI更简单明了 (5) 可以查看https请求

Android利用Fiddler进行网络数据抓包

原文地址:http://blog.csdn.net/forlong401/article/details/23538951 http://www.trinea.cn/android/android-network-sniffer/ 主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. 相对于tcpdump配合wireshark抓包的优势在于:(1)无需root (2)对Android和Iphone同样适用

Android 利用Fiddler进行网络数据抓包

主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博.微信.墨迹天气)的网络通信请求就可以利用这个方法. 相对于tcpdump配合wireshark抓包的优势在于:(1)无需root (2)对Android和Iphone同样适用 (3)操作更简单方便(第一次安装配置,第二次只需设置代理即可) (4)数据包的查看更清晰易懂,Fiddler的UI更简单明了 (5) 可以查看https请求.如果你坚持使用tcpdump也可见:利用tcpdump和wireshark

[Android Traffic] 让android应用在传输网络数据的时候更省电

到今年6月,我国的手机网民已经达到了3.88亿,超过了电脑终端.相信有智能机的同学都用过手机上网冲浪.但是手机的电量很快被用光了恐怕是每个人都不能忍受的一件事情.而打开数据连接进行网络数据的传输是很耗费电量的,如果用户发现你的应用榨干了他电池里的电,恐怕他会第一时间将你的应用给卸载掉.所以进行网络应用的开发理解怎样才能更省电就很有必要了. 如果数据连接一直保持着激活的状态,那么它的耗电量是很惊人的,所以手机会在网络空闲的情况下自动休眠数据连接来达到省电的目的.以3G网络来举例,它有三个不同的状态

Android之ListView&amp;Json加载网络数据

使用到的主要内容: 1.Json 解析网络数据 2.异步任务加载图片和数据 3.ListView 的内存空间优化(ConvertView)和运行时间优化(ViewHolder) 4.ListView 滚动监听实现分页加载数据 5.动态定义 布局和控件(想实现下拉刷新,好像不是这样实现的..) ....... HttpUtil 工具类网络申请数据(用 Gson 解析) --- 别忘记添加网络权限 <uses-permission android:name="android.permissio