package com.example.FrameWorkCollection.http;

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

import org.json.JSONException;
import org.json.JSONObject;

import com.google.gson.Gson;

/**
 * ½ö½öÊµÏÖÁËICallbackÖÐµÄparse·½·¨£¬ËùÒÔËû»¹ÊÇÒ»¸ö³éÏóÀà
 * Õâ¸öÀàµÄ×÷ÓÃÖ÷ÒªÊÇÎªÁËÕÒ¸öµ¥¶ÀµÄµØ·½·Åparse½âÎöµÄ¹ý³Ì£¬Òª²»È»Ö±½ÓÔÚµ÷ÓÃÊ±ºò£¨¼´MainActivity£©ÀïÐ´£¬Ì«Õ¼µØ·½ÁË
 * 
 * @author kangou
 * 
 * @param <T>
 */
public abstract class JsonCallback<T> extends AbstractCallback<T> {

	@Override
	protected T bindData(String result) throws Exception {
		// ¡ïÈç¹û°´ÕÕÒÔÏÂ·½Ê½½âÎö£¬²»ÐèÒªjson´®ºÍUserÀàµÄËùÓÐ¼üÖµ¶ÔÒ»Ò»¶ÔÓ¦£¬¿ÉÒÔÑ¡È¡jsonµÄÒ»²¿·Ö×÷ÎªUserÀà
		// ¡ïµ«ÊÇÈç¹ûÓÃÔ­À´µÄÖ±½ÓÒ»¼ü½âÎöÔò£¬±ØÐëÒ»Ò»¶ÔÓ¦£¬È±Ò»²»¿É

		// ½âÎöÉÏ±ßµÄresult,´ËÊ±£¬ËûÊÇÒ»¸öjson
		JSONObject json = new JSONObject(result);
		// »ñÈ¡ÃûÎª¡°data¡±µÄ¶ÔÓ¦µÄÖµ£¬²¢°ÑÕâ¸öÖµÖ±½Ó±ä³ÉÒ»¸öJSONObject
		JSONObject data = json.optJSONObject("data");
		Gson gson = new Gson();
		// µÃµ½ÀàÃûCallback<T>·ºÐÍTµÄ¾ßÌåÀàÐÍ£¬¼ò¶øÑÔÖ®¾ÍÊÇ»ñµÃ³¬ÀàµÄ·ºÐÍ²ÎÊýµÄÊµ¼ÊÀàÐÍ
		Type type = ((ParameterizedType) getClass().getGenericSuperclass())
				.getActualTypeArguments()[0];

		// ·µ»Ø½âÎödataºóµÃµ½µÄ¶ÔÏóclz
		return gson.fromJson(data.toString(), type);
	}
}
