經過gson json-javaben比較方便的方法

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

相關文章
相關標籤/搜索