public class OkHttpUtils { private static final String TAG = "OkHttpUtils----"; private static OkHttpUtils okHttpUtils; private final OkHttpClient okHttpClient; private final Handler handler; private OkHttpUtils() { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); HashMap<String, String> map = new HashMap<>(); PublicParamInterceptor paramInterceptor = new PublicParamInterceptor(map); handler = new Handler(Looper.getMainLooper()); okHttpClient = new OkHttpClient.Builder() .connectTimeout(3000, TimeUnit.MILLISECONDS) .readTimeout(3000, TimeUnit.MILLISECONDS) .writeTimeout(3000, TimeUnit.MILLISECONDS) .addInterceptor(httpLoggingInterceptor) .addInterceptor(paramInterceptor) .build(); } public static OkHttpUtils getInstance() { if (okHttpUtils == null) { synchronized (OkHttpUtils.class) { if (okHttpUtils == null) { return okHttpUtils = new OkHttpUtils(); } } } return okHttpUtils; } public void doGet(String url, final OkHttpCallBack okCallBack) { final Request request = new Request.Builder() .get() .url(url) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { handler.post(new Runnable() { @Override public void run() { if (okCallBack != null) { Log.d(TAG, "失败----- "); okCallBack.Error(new Exception("网络异常")); } } }); } @Override public void onResponse(Call call, final Response response) throws IOException { handler.post(new Runnable() { @Override public void run() { try { if (response != null && response.isSuccessful()) { String json = response.body().string(); if (okCallBack != null) { Log.d(TAG, "成功----- "); okCallBack.Success(json); } } } catch (IOException e) { e.printStackTrace(); } } }); } }); } public void doPost(String url, Map<String, String> map, final OkHttpCallBack callBack) { FormBody.Builder builder = new FormBody.Builder(); for (String key : map.keySet()) { builder.add(key, map.get(key)); } FormBody formBody = builder.build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { handler.post(new Runnable() { @Override public void run() { if (callBack != null) { Log.d(TAG, "失败----- "); callBack.Error(new Exception("网络异常")); } } }); } @Override public void onResponse(Call call, final Response response) throws IOException { handler.post(new Runnable() { @Override public void run() { try { if (response != null && response.isSuccessful()) { String json = response.body().string(); if (callBack != null) { Log.d(TAG, "成功----- "); callBack.Success(json); } } } catch (IOException e) { e.printStackTrace(); } } }); } }); } public class PublicParamInterceptor implements Interceptor { Map<String, String> paramMap = new HashMap<>(); public PublicParamInterceptor(Map<String, String> paramMap) { this.paramMap = paramMap; } @Override public Response intercept(Chain chain) throws IOException { //拿到原来的request Request oldRequest = chain.request(); //拿到请求的url地址 String url = oldRequest.url().toString(); //判断是get还是post请求 if (oldRequest.method().equalsIgnoreCase("GET")) { if (paramMap != null && paramMap.size() > 0) { StringBuilder builder = new StringBuilder(url); //接收公共的请求参数 for (Map.Entry<String, String> entry : paramMap.entrySet()) { builder.append("&" + entry.getKey() + "="+entry.getValue()); } url = builder.toString(); //如果之前的url没有?,我们需要手动给添加一个? if (!url.contains("?")) { url = url.replaceFirst("&", "?"); } //根据原来的request构造一个新的request Request request = oldRequest.newBuilder() .url(url) .build(); return chain.proceed(request); } } else { if (paramMap != null && paramMap.size() > 0) { RequestBody body = oldRequest.body(); if (body != null && body instanceof FormBody) { FormBody formBody = (FormBody) body; //把原来body里面的参数添加到新的body中 FormBody.Builder builder = new FormBody.Builder(); //为了防止添加相同的key和value HashMap<String, String> temMap = new HashMap<>(); for (int i = 0; i < formBody.size(); i++) { builder.add(formBody.encodedName(i), formBody.encodedValue(i)); temMap.put(formBody.encodedName(i), formBody.encodedValue(i)); } //把公共请求的参数添加到新的body中 for (Map.Entry<String, String> entry : paramMap.entrySet()) { if (!temMap.containsKey(entry.getKey())) { builder.add(entry.getKey(), entry.getValue()); } } FormBody newformBody = builder.build(); //依据原来的request构造一个新的request Request request = oldRequest.newBuilder() .post(newformBody) .build(); return chain.proceed(request); } } } return chain.proceed(oldRequest); } } public interface OkHttpCallBack { void Success(String json); void Error(Exception e); } }