OK回撥介面資料型別-泛型回撥
阿新 • • 發佈:2019-01-22
在OK請求完成之後:
handler.post(new Runnable() { @Override public void run() { Class<Object> genericUtil = GenericUtil.getGenericUtil(okCallback.getClass());//運用GenericUtil類返回泛型資料 Object o = GsonUtil.getGsonInstence().fromGson(string, genericUtil);//Gson解析 okCallback.onSuccess(o); //返回資料 } });
介面:
public interface OKCallback<T> { void onSuccess(T t); void onFalsed(Exception e); }
接收資料,實現的介面:
public abstract class OKEntityCallback<T> implements OKCallback<T>{ protected Class<T> cla; public OKEntityCallback() { this.cla = GenericUtil.getGenericUtil(this.getClass()); } }
資料回撥,泛型轉換:
public class GenericUtil { public static <T> Class<T> getGenericUtil(Class<?> cla){ Type genericSuperclass = cla.getGenericSuperclass(); Class<T> result = null; if(genericSuperclass instanceof ParameterizedType){ ParameterizedTypeparameterizedType = (ParameterizedType) genericSuperclass; Type[] types = parameterizedType.getActualTypeArguments(); result = (Class<T>) types[0]; } return result; } }
最終回撥資料:
OKHttpUtil.getInstence().get(path, new OKEntityCallback<OKTestBean>() { //泛型先加上,再重寫回家介面的方法 @Override public void onSuccess(OKTestBean okTestBean) { Log.e("Test",okTestBean.toString()); } @Override public void onFalsed(Exception e) { Log.e("Test","NO"); } });