《老罗Android》学习之GSON技术(三)

本文通过实例代码解析GSON在Android开发中的应用,主要介绍GSONTools.java工具类的使用,帮助开发者更好地进行数据序列化和反序列化操作。
摘要由CSDN通过智能技术生成
1.  GSON技术的介绍
   Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
   Gson支持任意复杂Java对象包括没有源代码的对象。
2. 服务器端:将Person对象 通过Gson解析成Json字符串.
   JsonTools.java
public class JsonTools {
	public JsonTools() {
	}
	/**
	 * @param object   是对解析的集合的类型
	 * @return
	 */
	public static String createJsonString(Object value) {
		Gson gson = new Gson();
		String str = gson.toJson(value);
		return str;
	}
}
 调用的时候把原来的key参数去掉:jsonString = JsonTools.createJsonString(service.getPerson());
  其余的都不用改。
3. 客户端:通过Gson类将 字符串还原成Person对象.

 1. GsonTools.java

public class GsonTools {
	public GsonTools() {
	}
	public static <T> T getPerson(String jsonString, Class<T> cls) {
		T t = null;
		try {
			Gson gson = new Gson();
			t = gson.fromJson(jsonString, cls);
		} catch (Exception e) {
		}
		return t;
	}

	/**
	 * 使用Gson进行解析 List<Person>
	 */
	public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
		List<T> list = new ArrayList<T>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
			}.getType());
		} catch (Exception e) {
		}
		return list;
	}
	/**
	 * @param jsonString
	 * @return
	 */
	public static List<String> getList(String jsonString) {
		List<String> list = new ArrayList<String>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
			}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
	public static List<Map<String, Object>> listKeyMaps(String jsonString) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString,
					new TypeToken<List<Map<String, Object>>>() {
					}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
}
TypeToken
如果不使用这种方法,先把包含JSON数据的数组循环迭代,迭代数组里面的每一个属性,然后在for循环当中构建出这个Person的对象,再把JSON里面的值取出来后,调用Person的set()方法来赋值。
采用这种方法的话,这个API提供了把对象中T属性的值,通过反射机制来映射出来之后,再从jsonString取出来的值赋值进去。
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {}.getType());
把jsonString字符串解析出来之后,封装到list集合当中,分别从T里面取出所有的getType,给它赋值。
2. MainActivity.java中的调用方式

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.person:
			String path = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=person";
			String jsonString = HttpUtils.getJsonContent(path);
			Person person = GsonTools.getPerson(jsonString, Person.class);
			Log.i(TAG, person.toString());
			break;
		case R.id.persons:
			String path2 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=persons";
			String jsonString2 = HttpUtils.getJsonContent(path2);
			List<Person> list = GsonTools.getPersons(jsonString2, Person.class);
			Log.i(TAG, list.toString());
			break;
		case R.id.liststring:
			String path3 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=liststring";
			String jsonString3 = HttpUtils.getJsonContent(path3);
			List<String> list2 = GsonTools.getList(jsonString3);
			Log.i(TAG, list2.toString());
			break;
		case R.id.listmap:
			String path4 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=listmap";
			String jsonString4 = HttpUtils.getJsonContent(path4);
			List<Map<String,Object>> list3 = GsonTools.listKeyMaps(jsonString4);
			Log.i(TAG, list3.toString());
			break;
		}
	}
4.  FastJSON
1. 服务器端
  不用改。
2. 客户端
1. FastJsonTools.java
public class FastJsonTools {
	public FastJsonTools() {
	}
	public static <T> T getPerson(String jsonString, Class<T> cls) {
		T t = null;
		try {
			t = JSON.parseObject(jsonString, cls);
		} catch (Exception e) {
		}
		return t;
	}
	/**
	 * 使用Gson进行解析 List<Person>
	 */
	public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
		List<T> list = new ArrayList<T>();
		try {
			list = JSON.parseArray(jsonString, cls);
		} catch (Exception e) {
		}
		return list;
	}
	public static List<Map<String, Object>> listKeyMaps(String jsonString) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			list = JSON.parseObject(jsonString,
					new TypeReference<List<Map<String, Object>>>() {
			});
		} catch (Exception e) {
		}
		return list;
	}
}
2. MainActivity.java中调用
public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.person:
			String path = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=person";
			String jsonString = HttpUtils.getJsonContent(path);
			Person person = FastJsonTools.getPerson(jsonString, Person.class);
			Log.i(TAG, person.toString());
			break;
		case R.id.persons:
			String path2 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=persons";
			String jsonString2 = HttpUtils.getJsonContent(path2);
			List<Person> list = FastJsonTools.getPersons(jsonString2, Person.class);
			Log.i(TAG, list.toString());
			break;
		case R.id.liststring:
			String path3 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=liststring";
			String jsonString3 = HttpUtils.getJsonContent(path3);
			List<String> list2 = FastJsonTools.getPersons(jsonString3,String.class);
			Log.i(TAG, list2.toString());
			break;
		case R.id.listmap:
			String path4 = "http://192.168.0.102:8080/jsonProject/servlet/JsonAction?action_flag=listmap";
			String jsonString4 = HttpUtils.getJsonContent(path4);
			List<Map<String,Object>> list3 = FastJsonTools.listKeyMaps(jsonString4);
			Log.i(TAG, list3.toString());
			break;
		}
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值