自定义接口CallBack
public interface CallBack {
void onSuccess(Object o);
void onFailed(Exception e);
}
封装OKHttp
public class OKHttpUtils {
private static volatile OKHttpUtils instance;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
private OKHttpUtils(){
}
public static OKHttpUtils getInstance(){
if (instance==null){
synchronized (OKHttpUtils.class){
if (instance==null){
instance=new OKHttpUtils();
}
}
}
return instance;
}
public void get(String url, final CallBack callBa, final Class c){
//创建OKHttpClient对象
OkHttpClient client = new OkHttpClient();
//创建Request对象
Request request = new Request.Builder()
.get()
.url(url)
.build();
//创建call对象
Call call = client.newCall(request);
call.enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
callBa.onFailed(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
//拿到数据解析
final Object o = new Gson().fromJson(result, c);
Log.e("data",result);
//当前实在子线程,回到主线程
handler.post(new Runnable() {
@Override
public void run() {
//回调
callBa.onSuccess(o);
}
});
}
});
}
}
post请求(使用拦截器)
public class OkHttpUtils { private static volatile OkHttpUtils instance; private static Handler handler = new Handler(); //单例模式 private void OkHttpUtils() { } public static OkHttpUtils getInstance() { if (instance == null) { synchronized (OkHttpUtils.class) { if (instance == null) { instance = new OkHttpUtils(); } } } return instance; } //post请求 public void post(String url, Map<String,String> map, final CallBack callBack, final Class c){ //1:创建OkHttpClient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Logger()).build(); //2:提供post请求需要的body对象 FormBody.Builder builder = new FormBody.Builder(); for(Map.Entry<String,String> entry:map.entrySet()){ builder.add(entry.getKey(),entry.getValue()); } FormBody body = builder.build(); //3:创建Request对象 final Request request = new Request.Builder() .post(body) .url(url) .build(); //4:创建Call对象 Call call = okHttpClient.newCall(request); //5:请求网络 call.enqueue(new Callback() { //请求失败 @Override public void onFailure(Call call, final IOException e) { handler.post(new Runnable() { @Override public void run() { callBack.onFailed(e); } }); } //请求成功 @Override public void onResponse(Call call, Response response) throws IOException { String result = response.body().string(); //拿到数据解析 final Object o = new Gson().fromJson(result, c); //当前是在子线程,回到主线程中 handler.post(new Runnable() { @Override public void run() { //回调 callBack.onSuccess(o); } }); } }); } }