赵雅智_通过开源框架获取Json数据

json简介

Json详细解析可见 http://redarmychen.iteye.com/blog/980243

JSONJavaScript Object Notation的缩写,可见JSON来源于JavaScriptJSON数据是一系列键值对的集合。

下面的代码就是一个JSON
{   
"phone" : ["12345678", "87654321"], // 数组   
"name" : "tianjiefeng", // 字符串   
"age" : 100, // 数值   
"address" : { "country" : "china", "province" : "jiangsu" }, // JSON对象   
"married" : false // 布尔值   

JSON是以key/value的形式存在的,keyStrng类型的,value的类型可以是一个数组,可以是一个字符串,可以是一个数值,也可以是一个布尔值,甚至可以是一个JSON对象

 

我们对json有一定了解之后,接下来,让我们来了解android中对json的解析

同样我们和之前项目类似。采用开源框架来编写程序。

 

解析json数据步骤:

1.引入jar文件

2.添加网络权限

3.创建客户端对象

4.处理get请求,在get请求中newJsonHttpResponseHandler对象

5.返回JSONObject对象或者JSONOArray对象(JSONOArray对象遍历json数组

6.JSONObject对象get(“属性名”),getString(“属性名”),getInt(“属性名”)等方法来获取指定属性名的值

 

具体实例:

1.引入jar文件

 

2.添加访问网络权限

<uses-permission android:name="android.permission.INTERNET"/>

3.Activity主要代码:代码中有详细注释,请认真观看

package com.example.android_json;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// http://172.16.237.200:8080/video/JsonServlet
		initData();
	}

	private void initData() {
		// 创建客户端对象
		AsyncHttpClient client = new AsyncHttpClient();
		String url = "http://172.16.237.200:8080/video/JsonServlet";
		Toast.makeText(this, "发送请求到服务器", 0).show();
		client.get(url, new JsonHttpResponseHandler() {
			
			//返回JSONObject对象|JSONOArray对象
			@Override
			public void onSuccess(int statusCode, Header[] headers,
					JSONArray response) {
				// TODO Auto-generated method stub
				super.onSuccess(statusCode, headers, response);

				if (statusCode == 200) {
					//遍历json数组
					for (int i = 0; i < response.length(); i++) {
						try {
							// 获取具体的一个JSONObject对象
							JSONObject obj = response.getJSONObject(i);
							//JSONObject对象get(“属性名”),getString(“属性名”),getInt(“属性名”)等方法来获取指定属性名的值
							System.out.println("序号" + obj.getString("id")
									+ "--------姓名:" + obj.getString("name")
									+ "--------密码:" + obj.getString("pass")
							+ "--------其他:" + obj.getString("pass"));
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
				}
			}
		});
	}

}


 

在控制台输出结果:

 赵雅智_通过开源框架获取Json数据_第1张图片

 

常见错误锦籍:

一、当遍历json数组是,若没有对于json数据就会报错

例如:

//遍历json数组
for (int i = 0; i < response.length(); i++) {
	try {
		// 获取具体的一个JSONObject对象
		JSONObject obj = response.getJSONObject(i);
		//JSONObject对象get(“属性名”),getString(“属性名”),getInt(“属性名”)等方法来获取指定属性名的值
		System.out.println("序号" + obj.getString("id")
				+ "--------姓名:" + obj.getString("name")
				+ "--------性别:" + obj.getString("sex")
				+ "--------密码:" + obj.getString("pass"));
	} catch (JSONException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

运行效果如下

 赵雅智_通过开源框架获取Json数据_第2张图片

解析:json文件中没有sex字段,若我 们在程序中写入则会报如上错误,所有在编写程序的时候应多加注意字段的对应。

 

 

开源框架资源:http://download.csdn.net/detail/zhaoyazhi2129/7400787

源码:http://download.csdn.net/detail/zhaoyazhi2129/7400807


原文地址http://blog.csdn.net/zhaoyazhi2129/article/details/27053747

 

你可能感兴趣的:(android,AsyncHttpClient)