public class OkHttpHelper {
private String TAG = OkHttpHelper.class.getSimpleName();
private OkHttpClient mOkHttpClient;//okHttpClient 实例
private static OkHttpHelper mInstance = null;
private Handler okHttpHandler;//全局处理子线程和M主线程通信
private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8");//mdiatype 这个需要和服务端保持一致
public interface ReqCallBack<T> {
/**
* 响应成功
*/
void onReqSuccess(T result);
/**
* 响应失败
*/
void onReqFailed(String errorMsg);
}
private OkHttpHelper(Context context){
//初始化OkHttpClient
mOkHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)//设置超时时间
.readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(10, TimeUnit.SECONDS)//设置写入超时时间
.build();
//初始化Handler
okHttpHandler = new Handler(context.getMainLooper());
}
/**
* 获取单例引用
*
* @return
*/
public static OkHttpHelper getInstance(Context context) {
OkHttpHelper inst = mInstance;
if (inst == null) {
synchronized (OkHttpHelper.class) {
inst = mInstance;
if (inst == null) {
inst = new OkHttpHelper(context.getApplicationContext());
mInstance = inst;
}
}
}
return inst;
}
public void doPost(String url, String jsonParams, final ReqCallBack callBack){
RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonParams);
final Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
failedCallBack("访问失败", callBack);
Log.e(TAG, e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String string = response.body().string();
Log.e(TAG, "response ----->" + string);
successCallBack( string, callBack);
} else {
failedCallBack("服务器错误", callBack);
}
}
});
}
public Response doPostSync(String url, String jsonParams) throws IOException{
RequestBody requestBody = RequestBody.create(MEDIA_TYPE_JSON, jsonParams);
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = mOkHttpClient.newCall(request);
return call.execute();
}
public void doGet(String url,final ReqCallBack callBack){
Request request = new Request.Builder().url(url).build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
failedCallBack("error:"+e.getCause(), callBack);
Log.e(TAG, e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String string = response.body().string();
Log.e(TAG, "response ----->" + string);
successCallBack( string, callBack);
} else {
failedCallBack("server error: "+response.toString(), callBack);
}
}
});
}
public Response doGetSync(String url) throws IOException{
Request request = new Request.Builder().url(url).build();
Call call = mOkHttpClient.newCall(request);
return call.execute();
}
/**
* 统一同意处理成功信息
* @param result
* @param callBack
* @param <T>
*/
private <T> void successCallBack(final T result, final ReqCallBack<T> callBack) {
okHttpHandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.onReqSuccess(result);
}
}
});
}
/**
* 统一处理失败信息
* @param errorMsg
* @param callBack
* @param <T>
*/
private <T> void failedCallBack(final String errorMsg, final ReqCallBack<T> callBack) {
okHttpHandler.post(new Runnable() {
@Override
public void run() {
if (callBack != null) {
callBack.onReqFailed(errorMsg);
}
}
});
}
来源:CSDN
作者:abner.Li
链接:https://blog.csdn.net/Cailand/article/details/103913686