/** * 通用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