package com.jiyun.dell.xiongmaopindao.ui.tool.okhttptool; import com.google.gson.Gson; import com.jiyun.dell.xiongmaopindao.ui.App; import java.io.IOException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Map; import java.util.Set; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by DELL zhanghuirong on 2017/11/20. */ public class OkHttpUtil implements IHttp { private static OkHttpUtil okHttpUtil; private OkHttpClient okHttpClient; private OkHttpUtil() { okHttpClient = new OkHttpClient.Builder().build(); } public static OkHttpUtil getInstance() { if (okHttpUtil == null) { synchronized (OkHttpUtil.class) { if (okHttpUtil == null) { okHttpUtil = new OkHttpUtil(); } } } return okHttpUtil; } @Override public <T> void get(String url, Map<String, String> map, final NetWorkCallBack<T> netWorkCallBack) { if (map != null && map.size() > 1) { StringBuffer sb = new StringBuffer(url); sb.append("?"); //得到key Set<String> keySet = map.keySet(); for (String key : keySet) { sb.append(key).append("=").append(map.get(key)).append("&"); } url = sb.substring(0, sb.length() - 1); } final Request request = new Request.Builder().url(url).build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { netWorkCallBack.onError((T) e.getMessage()); } @Override public void onResponse(Call call, Response response) throws IOException { final String string = response.body().string(); App.context.runOnUiThread(new Runnable() { @Override public void run() { Gson gson = new Gson(); Type[] types = netWorkCallBack.getClass().getGenericInterfaces(); Type[] typeArguments = ((ParameterizedType) types[0]).getActualTypeArguments(); Type typeArgument = typeArguments[0]; T o = gson.fromJson(string, typeArgument); netWorkCallBack.onSuccess(o); } }); } }); } @Override public <T> void post(String url, Map<String, String> map, NetWorkCallBack<T> netWorkCallBack) { } }
//networkCallback类
public interface NetWorkCallBack<T> { void onSuccess(T str); void onError(T e); }
//Ihttp类
public interface IHttp { <T> void get(String url, Map<String, String> map, NetWorkCallBack<T> netWorkCallBack); <T> void post(String url, Map<String, String> map, NetWorkCallBack<T> netWorkCallBack); }