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