首先定义一个接口INetCallBack
public interface INetCallBaek{
void onSuccess(String response);
void onFailed(Throwable e);
}
用来返回equeue中的成功失败,再定义一个接口IhttpInvoke
public interface IhttpInvoke {
void doget(String url, INetCallback callback);
void dopost(String url, HashMap<String,String> params, INetCallback callback);
void dopostMutipart(String url,HashMap<String,String> params,INetCallback callback);
void dopostjson(String url,String jsonstr,INetCallback callback);
}
然后写一个工具类OKHttpUtils,实现IhttpInvoke接口
public class OkhttpUtils implements IhttpInvoke {
public static OkhttpUtils sInstance = new OkhttpUtils();
public static OkhttpUtils getInstance(){
return sInstance;
}
private Handler handler = new Handler(Looper.getMainLooper());
private static OkHttpClient client;
public OkhttpUtils(){
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override public void log(String message) {
Log.d("hyx", message);
}});
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.addInterceptor(new HeaderInterceptor())
.addInterceptor(logging)
.build();
}
@Override
public void doget(String url, INetCallback callback){
Request request = new Request.Builder()
.url(url)
.get()
.build();
executeRequest(callback, request);
}
@Override
public void dopost(String url, HashMap<String,String> params,INetCallback callback){
FormBody.Builder formBodybuilder = new FormBody.Builder();
if (params!=null){
for (String param : params.keySet()){
formBodybuilder.add(param,params.get(param));
}
}
Request request = new Request.Builder()
.url(url)
.post(formBodybuilder.build())
.build();
executeRequest(callback, request);
}
@Override
public void dopostMutipart(String url,HashMap<String,String> params,INetCallback callback){
MultipartBody.Builder multipartbuilder = new MultipartBody.Builder();
multipartbuilder.setType(MultipartBody.FORM);
if (params!=null){
for (String param:params.keySet()){
multipartbuilder.addFormDataPart(param,params.get(param));
}
}
Request request = new Request.Builder()
.url(url)
.post(multipartbuilder.build())
.build();
executeRequest(callback,request);
}
@Override
public void dopostjson(String url,String jsonstr,INetCallback callback){
MediaType jsonmediaType = MediaType.get("application/json");
RequestBody requestBody = RequestBody.create(jsonstr, jsonmediaType);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
executeRequest(callback,request);
}
}
封装了Call对象及Call.equeue
private void executeRequest(INetCallback callback, Request request) {
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailed(e);
}
});
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
String respstr = null;
try {
respstr = response.body().string();
} catch (IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailed(e);
}
});
return;
}
String finalRespstr = respstr;
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(finalRespstr);
}
});
}
});
}
然后在事件处理中调用
OKHttpUtils.getInstance.(get/post/postMutipart/postjson)中的一种即可
另附okhttp github地址:https://github.com/square/okhttp