package cn.bingoogolapple.volley; import android.app.Activity; import com.google.gson.Gson; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:15/7/2 10:14 * 描述: */ public abstract class JsonRespDelegate<T> extends VolleyRespDelegate<T> { protected static Gson sGson = new Gson(); protected JsonRespDelegate(Activity activity) { super(activity); } protected Class<T> getTClass() { ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); Type resultType = type.getActualTypeArguments()[0]; // ImplForType, ParameterizedTypeImpl // if ("ParameterizedTypeImpl".equals(resultType.getClass().getSimpleName()) || "ImplForType".equals(resultType.getClass().getSimpleName())) { // try { // Field field = resultType.getClass().getDeclaredField("rawTypeName"); // field.setAccessible(true); // String rawTypeName = (String) field.get(resultType); // return (Class<T>) Class.forName(rawTypeName); // } catch (Exception e) { // return (Class<T>) Collection.class; // } // } else { // return (Class<T>) resultType; // } if (resultType instanceof Class) { return (Class<T>) resultType; } else { // 处理集合 try { Field field = resultType.getClass().getDeclaredField("rawTypeName"); field.setAccessible(true); String rawTypeName = (String) field.get(resultType); return (Class<T>) Class.forName(rawTypeName); } catch (Exception e) { return (Class<T>) Collection.class; } } } protected abstract void handleResponse(String response); protected abstract void onJsonError(Exception e); }