Android-泛型小记

在刚刚开始做http模块的时候,没有用开源网络库,仅仅简单的封装了系统的HttpClient,所以在解析json数据的时候做了一定的封装处理,可以统一处理json解析减少代码重复,用到了简单的泛型处理,以下是处理思路:

我们发起网络请求的时候,预先传入携带泛型的回调监听,用来为统一解析提供处理类型,类似以下方式

//DoHttpRequest 是封装的http工具,只关注这个模式即可,忽略即可
DoHttpRequest doHttpRequest = new DoHttpRequest(DoHttpRequest.GET,
				Constant.FLOWPROC_GET, postData, null,
				new ResultCallbackListener<List<WorkFlowProcDetail>>() {

					@Override
					public void onResult(List<WorkFlowProcDetail> list) {
						//数据处理
					}

					@Override
					public void onFail(){
                       //失败处理  
                    }

					@Override
					public void onEnd() {
						//结束处理
					}
				});
new Thread(doHttpRequest).start();

以下为具体的监听处理代码

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

@SuppressWarnings({ "unchecked" })
public abstract class JsonParseCallbackListener<T> {
	protected T data;
	protected Type entityType;

	/**
	 * 取得子类class的方法
	 */
	public JsonParseCallbackListener() {
		Type genType = getClass().getGenericSuperclass();
		Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
		entityType = params[0];
	}

	public void parse(String json) {
		if (entityType.equals(String.class)) {
			onResult((T) json);
		} else {
			data = JsonHelper.parseObject(json, entityType);
			if (data == null) {
				onFail();
			} else {
				onResult(data);
			}
		}
		onEnd();
	}

	public abstract void onResult(T result);

	public abstract void onFail();

	public abstract void onEnd();
}
public abstract class ResultCallbackListener<T> extends
		JsonParseCallbackListener<T> {
	public static final int SUCCESS = 0x001;
	public static final int FAIL = 0x002;

	public void onHandle(int status, String result) {
		switch (status) {
		case SUCCESS:
			parse(result);
			break;
		case FAIL:
			onFail();
			onEnd();
			break;
		}
	}
}

以下为取得json数据的分发处理

//http请求成功时
listener.onHandle(ResultCallbackListener.SUCCESS,jsonStr);
//http请求失败时
listener.onHandle(ResultCallbackListener.FAIL, null);

这样即可统一处理数据解析,处理的重点在或者获取泛型的数据类型上,谨此记录,方便自己翻阅

猜你喜欢

转载自blog.csdn.net/yao11965w1616/article/details/82655797