package com.andy.okhttpdemo;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpUtils {
//单例模式
private static OkHttpUtils instance;
private OkHttpClient client;
private Gson gson;
private Handler handler;
private OkHttpUtils(){
client=new OkHttpClient.Builder()
.readTimeout(3000, TimeUnit.MILLISECONDS)
.writeTimeout(3000, TimeUnit.MILLISECONDS)
.connectTimeout(3000, TimeUnit.MILLISECONDS)
.build();
gson=new Gson();
handler=new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
DataMsg data=(DataMsg)msg.obj;
switch (msg.what){
case 0:
if(data.callBack!=null)
data.callBack.success(data.obj);
break;
case 1:
if(data.callBack!=null)
data.callBack.error(data.e);
break;
}
}
};
}
public static OkHttpUtils getInstance(){
if(instance==null){
synchronized (OkHttpUtils.class){
if(instance==null){
instance=new OkHttpUtils();
}
}
}
return instance;
}
public void get(String getUrl,Class<?> cls,MyCallBack callBack){
Request request = getRequest(getUrl);
call(request,cls,callBack);
}
private void call(Request request, final Class<?> cls, final MyCallBack callBack) {
Call call=client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
DataMsg data=new DataMsg();
data.e=e;
data.callBack=callBack;
Message msg=Message.obtain();
msg.what=1;
msg.obj=data;
handler.sendMessage(msg);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
DataMsg data=new DataMsg();
data.obj=gson.fromJson(result,cls);
data.callBack=callBack;
Message msg=Message.obtain();
msg.what=0;
msg.obj=data;
handler.sendMessage(msg);
}
});
}
public Request getRequest(String url){
Request request=new Request.Builder()
.url(url)
.build();
return request;
}
interface MyCallBack<T>{
void success(T t);
void error(Exception e);
}
static class DataMsg{
Exception e;
Object obj;
MyCallBack callBack;
}
}
OkHttp解析
最新推荐文章于 2024-12-20 01:52:58 发布