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を生成して統一的にコールバックすればよい.