package com.ntp.network.okhttp; import android.os.Handler; import android.os.Looper; import com.google.gson.Gson; import com.google.gson.internal.$Gson$Types; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import java.io.IOException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; /** * 封装Callback,返回对象,可在onResponse中更新UI * Created by lishuangxiang on 2015/12/13. */ public class ObjectCallbackHandler<T> implements com.squareup.okhttp.Callback { private Handler mHandler; private Type mType; public ObjectCallbackHandler() { mType = getSuperclassTypeParameter(getClass()); mHandler=new Handler(Looper.getMainLooper()); } static Type getSuperclassTypeParameter(Class<?> subclass) { Type superclass = subclass.getGenericSuperclass(); ParameterizedType parameterized = (ParameterizedType) superclass; return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]); } @Override public void onFailure(final Request request, final IOException e) { mHandler.post(new Runnable() { @Override public void run() { onFailure(request,e,0); } }); } @Override public void onResponse(Response response){ if (response.isSuccessful()){ String content; final T t; try { content = response.body().string(); Gson gson = new Gson(); t = gson.fromJson(content,mType); mHandler.post(new Runnable() { @Override public void run() { onResponse(t); } }); } catch (IOException e) { e.printStackTrace(); } } } public void onResponse(T t){ } public void onFailure(Request request,IOException e,int response){ } }