文档章节

通过gson json-javaben比较方便的方法

向金攀
 向金攀
发布于 2014/03/22 14:28
字数 588
阅读 203
收藏 2
/**
 * 通用json字符串格式
 * {
  "status": 1,
  "msg": "成功",
  "message":"****"
  }
 * @author xiangjinpan
 *
 */
public class McBean implements Constant
{

	//状态
	@Expose
	@SerializedName(STATUS)
	private int status;
	//消息
	@Expose
	@SerializedName(MSG)
	private String msg;
	
}

一个json字符串的javaben 包含基本数据  因为我这边的服务器数据可能根本不包含message字段 只有状态 成功与否

/**
 * 所有数据类的抽象类  boolean 等类型 使用包装类Boolean
 * @author xiangjinpan
 *
 * @param <T>
 */
public abstract class Data<T> extends McBean 
{
	
}


什么都没做 因为要继承2个子类

/**
 * 
 * 目前只能处理绝对返回是jsonarray的
 * @author xiangjinpan
 *
 * @param <T>
 */
public class PluralData<T> extends Data<T> 
{
	@Expose
	private List<T> value;
	@SerializedName(COUNT)
	private int count;
}

/**
 * 只针对服务器返回的 value 不是一个jsonarray的情况
 * 
 * 默认解析所有字段
 * @author xiangjinpan
 *
 * @param <T>
 */
public class SingularData<T> extends Data<T>
{
	@Expose
	@SerializedName(VALUE)
	private T value;
}


一个子类处理 message是字段 一个处理是jsonarray的  

public interface BaseListener_<T>
{
	public void onSuccess(T object);

	public void onFailed(int errno);

	public void onException(String str);
}

一个最基本的回调

/**
 * 基本回调
 * @author xiangjinpan
 * @param <T>
 */
public abstract class RequestListener<T extends Data<?>> extends TypeToken<T> implements BaseListener_<T>,Constant
{
	
}

空的RequestListener 以后所有请求都要它来进行的。


我还派生一个RequestListener 的子类 SongSquareDataCallBack 实现一些请求生命周期的回调 比如线程启动 结束 字段映射 增加自定义Gson类型转换器等


public class SongSquareData extends BaseData
{
	public SongSquareData(Context context)
	{
		super(context);
	}

	/**
	 * 获取广场数据
	 * @param start
	 * @param length
	 * @param listener
	 */
	public <T extends Data<?>> void getSquare(int start, int length, SongSquareDataCallBack<T> listener)
	{
		ArrayList<KeyValue<String, Object>> parametList = new ArrayList<KeyValue<String, Object>>();
		parametList.add(new KeyValue<String, Object>("start", start));
		parametList.add(new KeyValue<String, Object>("length", length));
		startRequestThread(NetUrlConstant.SONG_SQUARE, parametList, listener);
	}

	public <T extends Data<?>> void getSquareList(int id, SongSquareDataCallBack<T> listener)
	{
		ArrayList<KeyValue<String, Object>> parametList = new ArrayList<KeyValue<String, Object>>();
		parametList.add(new KeyValue<String, Object>("id", id));
		startRequestThread(NetUrlConstant.SONG_SQUARE_LIST, parametList, listener);
	}
}

简单封装了网络请求 

mData.getSquareList(1, new SongSquareDataCallBack<PluralData<SongListBean>>(){

			@Override
			public void onFailed(int errno)
			{
				super.onFailed(errno);
			}

			@Override
			public void onException(String str)
			{
				super.onException(str);
			}

			@Override
			public void onSuccess(PluralData<SongListBean> object)
			{
				super.onSuccess(object);
			}
		});


OK 在Activity 请求数据 以后只需要根据json字符串生成javaben 然后通过统一的方式回调就好了。



© 著作权归作者所有

向金攀
粉丝 0
博文 4
码字总数 2461
作品 0
江北
程序员
私信 提问
使用GSON来解析和生成JSON基础,通过传入List集合自动生成json字符串(一)

由于当时本人水平很渣,实际没怎么麻烦。不要用这种写法。 使用GSON来解析JSON数据需要下载google-gson。 用gson解析以上字符串输出,将并其转化成实体类对象,然后放入List容器中并遍历然后...

奔跑的码农
2016/08/04
936
0
轻触开源(二)-Gson项目源码解析_壹

上篇文章<轻触开源-Java泛型Type类型的应用和实践(一)> https://my.oschina.net/u/874727/blog/747427 非墨写到JAVA的泛型机制,被用到很多的开源项目。在众多的开源项目中,Gson是很具有代表性...

-非墨-
2016/09/20
1K
0
Json解析速度比较-Android API、Gson、Fastjson

IOS现成的API里的json解析速度非常快,这里就不说了,今天对比一下Android里面json的解析库。 首先第一个是Android API里面自带的json解析,其次是谷歌提供的Gson解析库(开源),其次是在网...

未来程序员
2018/06/29
0
0
Java的序列化与反序列化工具--Redkale-Convert

Convert 是一个比较独立的组件,仅依赖于util包。提供Java对象的序列化与反序列化功能。支持JSON(JavaScript Object Notation)、BSON(Binary Stream Object Notation)两种格式化。 两种格式使...

Redkale
2016/02/19
1K
1
Gson快速解析JSON字符串

关于GSON的入门级使用,这里就不提了,如有需要可以看这篇博文 《Google Gson的使用方法,实现Json结构的相互转换》 ,写的很好,通俗易懂。 我为什么写这篇文章呢?因为前几晚跟好友 xiasuh...

留白的云
02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iota硬件集成实战教程

本教程面向iota初学者,我们将学习如何开发基于指定IOTA地址的余额来闭合或断开一个连接到树莓派上的继电器,点亮或熄灭LED。教程虽然简单,但足以展示IOTA的强大能力。 我们将使用一个联网的...

汇智网教程
12分钟前
2
0
influxdb-1.7.8绿色安装-centos7

influxdb作为一款性能强悍的时序数据库, 一旦拥有, 别无所求. 本文介绍它的绿色安装方法. 环境准备, 下载, 解压. [dev5@7bdc6644c7c4 influxdb-1.7.8] cat /etc/redhat-release CentOS Linu...

dev5
16分钟前
1
0
Java 11 新特性

java 11 是继 java8 之后的第一个LTS版本。因此有必要针对它进行一些深入的学习,虽然短时间内java8 还是主流版本。当然,如果从java8基础上升级,几乎可以确定目标就是java11。 同时也要明确...

polly
17分钟前
1
0
SVG

本文转载于:专业的前端网站➯SVG SVG 是使用 XML 来描述二维图形和绘图程序的语言。 SVG 使用 XML 编写。 一、什么是SVG? SVG 指可伸缩矢量图形,使用 XML 格式定义图形,SVG图像在放大或改...

前端老手
18分钟前
2
0
zabbix server proxy

server./configure --prefix=/data/zabbix3.4 --enable-server --enable-agent --with-net-snmp --with-libcurl --enable-proxy --with-mysql=/data/mysql-5.6.44-linux-glibc2.12-x8......

雁南飞丶
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部