gson json-javabenで比較的便利な方法
3277 ワード
/**
* 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を生成して統一的にコールバックすればよい.