直接上代码,代码可用,其中用到了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);
}
}

本文介绍了一个使用OkHttp进行服务请求的实用案例,包括异步POST请求和JSON数据的发送。通过单例模式实现了OkHttp客户端的管理,并提供了错误处理和回调机制。
1684

被折叠的 条评论
为什么被折叠?



