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

/**
 * 通用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 然后通过统一的方式回调就好了。



你可能感兴趣的:(通过gson json-javaben比较方便的方法)