您的位置:首页 > 编程语言 > Java开发

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

2014-03-22 00:00 405 查看
摘要: 我自己觉得还不错,太不想每次都要去解析json字符串了 本来gson都可以的 但是还是觉得每次都要去写 new TypeToken<A<B>>(){}.getType(); 这样的代码太蛋疼了。 一个网络接口返回的数据都要单独去这样重复写

/**
* 通用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 然后通过统一的方式回调就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐