package com.guojunke.greendao.net;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import com.google.gson.Gson;
import com.guojunke.greendao.HeaderInterceptor;
import com.guojunke.greendao.LoggerUtil;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttpUtil {
private static OkHttpUtil sInstance;
private OkHttpClient mOkHttpClient;
private Gson mGson = new Gson();
private final int REQUEST_OK = 1;//请求成功
private final int REQUEST_FAILER = 2;//请求失败
private Handler mHandler = new Handler();
private OkHttpUtil() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.writeTimeout(5000, TimeUnit.MILLISECONDS);
builder.connectTimeout(5000, TimeUnit.MILLISECONDS);
builder.readTimeout(5000, TimeUnit.MILLISECONDS);
//添加请求头拦截器
builder.addInterceptor(new HeaderInterceptor());
builder.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
if (!TextUtils.isEmpty(message)) {
if (message.startsWith("{") || message.startsWith("[")) {
//打印json
LoggerUtil.json(message);
} else {
LoggerUtil.d(message);
}
}
}
}).setLevel(HttpLoggingInterceptor.Level.BODY));
mOkHttpClient = builder.build();
}
//单例模式
public static OkHttpUtil getsInstance() {
if (sInstance == null) {
//a,b
synchronized (OkHttpUtil.class) {
if (sInstance == null) {
sInstance = new OkHttpUtil();
}
}
}
return sInstance;
}
public <T> void doGet(String url, final Class<T> cls, final NetCallBack netCallBack) {
Request.Builder builder = new Request.Builder();
builder.url(url);
final Request request = builder.build();
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() {
netCallBack.onFailure(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
ResponseBody body = response.body();
String jsonData = body.string();
final T data = mGson.fromJson(jsonData, cls);
mHandler.post(new Runnable() {
@Override
public void run() {
netCallBack.onResponse(data);
}
});
}
});
}
public void doPostJson(String url, Map parame){
Request.Builder builder = new Request.Builder();
builder.url(url);
RequestBody requestBody = null;
MediaType parse = MediaType.parse("application/json utf-8");
Gson gson = new Gson();
String jsonParam = gson.toJson(parame);
requestBody = RequestBody.create(parse, jsonParam);
builder.post(requestBody);
Request request = builder.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
public void postFormData(Map parame){
FormBody formBody = null;
FormBody.Builder builder = new FormBody.Builder();
builder.add("","");
//....
formBody = builder.build();
Request request = null;
request=new Request.Builder()
.url("")
.post(formBody)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(null);
}
public void postFile(){
}
public interface NetCallBack {
void onFailure(String msg);
void onResponse(T data);
}
}