直接上代码,代码可用,其中用到了Json解析,我使用的Gson,大家自己下载。
package com.example.msh.utils; import android.util.Log; import org.json.JSONArray; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * OkHttp 发送服务请求帮助类 *Author:William(徐威) *Create Time:2018-07-24*/ public class OkHttpManager { private static String TAG = "OkHttpManager"; static String apiUrl="http://192.168.1.47/Eson.Store.Host/"; // "http://storeservice.mmsshh.com/"; private OkHttpClient mOkHttpClient; //public static String FAILURE = "failure"; public enum State {SUCCESS, FAILURE, NETWORK_FAILURE} private static ResultCallback defaultResultCallback = new ResultCallback() { @Override public void onCallBack(State state, String result) { Log.e(TAG, "由于未定义ResultCallback参数,以下信息未被处理" + "\tstate:" + state + "\tresult:" + result); } }; private String Network_Failure_Message = "Timeout:请检查网络连接。"; /** * 单例模式: * "静态内部类的单例模式"只有当被调用的时候才开始首次被加载,利用此特性,可以实现懒汉式 * Author:William(徐威) * Create Time:2018-07-24*/ private static class OkHttpManagerBuilder { private static OkHttpManager okHttpManager = new OkHttpManager(); } /** * 默认构造函数 * Author:William(徐威) * Create Time:2018-07-24*/ private OkHttpManager() { //mOkHttpClient=new OkHttpClient();//使用默认配置 mOkHttpClient = new OkHttpClient().newBuilder() .connectTimeout(10000L, TimeUnit.MILLISECONDS)//10000毫秒 .readTimeout(10000L, TimeUnit.MILLISECONDS) .writeTimeout(30L, TimeUnit.SECONDS)//30秒 .build(); Log.e(TAG, "调用了OkHttpManager一次"); } private static OkHttpManager getInstance() { return OkHttpManagerBuilder.okHttpManager; } /** * 异步Post请求,以json格式发送数据 *Author:William(徐威) *Create Time:2018-07-24*/ public static void CommonPostJson(String json,String method, ResultCallback callback) { getInstance().PostJson(apiUrl+method+"?format=json", json, callback); } /** * 异步Post请求,以json格式发送数据 * Author:William(徐威) * Create Time:2018-07-24*/ private void PostJson(String url, String json, ResultCallback callback) { try { MediaType JSON = MediaType.parse("application/json; charset=utf-8"); byte[] postData = new byte[0]; if (json != null) { postData = json.getBytes("UTF-8"); } RequestBody mRequestBody = RequestBody.create(JSON, postData); Request request = new Request.Builder() .url(url) .post(mRequestBody) .build(); ExecuteAsyn_String(request, callback); } catch (IOException e) { e.printStackTrace(); return; } } /** * 开始执行异步请求,获得少量的String类型返回值。 * 普通的异步post请求 * Author:William(徐威) * Create Time:2018-07-24*/ private void ExecuteAsyn_String(Request request, final ResultCallback callback) { mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { callback.onCallBack(State.NETWORK_FAILURE, Network_Failure_Message); //Log.e(TAG, "OkHttp is on Failure:操作取消,文件读取失败或者连接超时"); e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { Log.v(TAG, "the request was successfully received, understood, and accepted."); String responseBody = response.body().string(); //回调,把response传递给调用该OKHttpUtil的线程 callback.onCallBack(State.SUCCESS, responseBody); } else { Log.e(TAG, "OkHttp response is not successful. Code is: " + response.code()); callback.onCallBack(State.FAILURE, Integer.toString(response.code())); } } }); } /** * 回调接口定义 * Author:William(徐威) * Create Time:2018-07-24*/ public interface ResultCallback { void onCallBack(State state, String result); } }