package com.example.day1; import android.os.Handler; import android.os.Looper; import java.io.IOException; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; //import okhttp3.logging.HttpLoggingInterceptor; public class OkhttpUtils { private static OkhttpUtils mOkhttpUtils = null; private final OkHttpClient mOkHttpClient; private Handler mHandler = new Handler(Looper.myLooper()); public OkhttpUtils() { // //日志拦截器 // HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); // //设置日志拦截器打印日志的级别 // httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); //构造一个OkHttpClient对应 mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5, TimeUnit.SECONDS) .writeTimeout(5, TimeUnit.SECONDS) // .addInterceptor(httpLoggingInterceptor) .build(); } public static OkhttpUtils getInstance() { if (mOkhttpUtils == null) { synchronized (OkhttpUtils.class) { if (mOkhttpUtils == null) { mOkhttpUtils = new OkhttpUtils(); } } } return mOkhttpUtils; } public void doGet(String url, final IOkhttpCallBack iOkhttpCallBack) { Request request = new Request.Builder() .url(url) .build(); //根据请求Request构造一个http请求 final Call call = mOkHttpClient.newCall(request); //执行异步请求 call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onFailure(e); } } }); } @Override public void onResponse(Call call, Response response) throws IOException { if (response != null && response.isSuccessful()) { //通过获取响应体之后,通过string方法获取json字符串 final String json = response.body().string(); mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onSuccess(json); } } }); return; } mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onFailure(new Exception("服務器異常")); } } }); } }); } public void doPost(String url, MapparamsMap, final IOkhttpCallBack iOkhttpCallBack) { //构造请求体 FormBody.Builder builder = new FormBody.Builder(); //循环map添加请求参数 for (Map.Entry entry : paramsMap.entrySet()) { builder.add(entry.getKey(), entry.getValue()); } FormBody formBody = builder.build(); Request request = new Request.Builder() .url(url) .post(formBody) .build(); //根据请求Request构造一个http请求 final Call call = mOkHttpClient.newCall(request); //执行异步请求 call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onFailure(e); } } }); } @Override public void onResponse(Call call, Response response) throws IOException { //只有response状态码为200,才是真正的成功 if (response != null && response.isSuccessful()) { //通过获取响应体之后,通过string方法获取json字符串 final String json = response.body().string(); mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onSuccess(json); } } }); return; } mHandler.post(new Runnable() { @Override public void run() { if (iOkhttpCallBack != null) { iOkhttpCallBack.onFailure(new Exception("服務器異常")); } } }); } }); } public interface IOkhttpCallBack { void onSuccess(String json); void onFailure(Exception error); } }