/** * 通用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字段 只有状态 成功与否java
/** * 全部数据类的抽象类 boolean 等类型 使用包装类Boolean * @author xiangjinpan * * @param <T> */ public abstract class Data<T> extends McBean { }
什么都没作 由于要继承2个子类
json
/** * * 目前只能处理绝对返回是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 之后全部请求都要它来进行的。ide
我还派生一个RequestListener 的子类 SongSquareDataCallBack 实现一些请求生命周期的回调 好比线程启动 结束 字段映射 增长自定义Gson类型转换器等spa
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 而后经过统一的方式回调就行了。code