创建工具类,工具类为单例模式:
这里解释一下,单例的是工具对象而不是okhttp对象
因为在工具类的私有构造器中,创建了okhttp对象
工具类对象只能创建一次对象(单例),自然okhttp对象也就创建一个
1.创建工具类的私有构造器,不让外部访问
private OkHttpUtil(){
//创建okhttp对象
okHttpClient = new OkHttpClient.Builder() .build();
}
2.暴露一个静态方法,让外部访问(:外部不能创建工具类对象,因为构造器是私有的不让访问)
public static OkHttpUtil getInstance(){
//判断对象地址是否为空
if(okHttpUtil==null){
//锁定(监视)工具类,不让线程同步访问
synchronized (OkHttpUtil.class){
//判断地址是否为空
if(okHttpUtil==null){
//创建自己对象,指向地址
okHttpUtil = new OkHttpUtil();
}
}
}
//如果对象地址不为空,就返回对象地址(说明不是第一次访问了,单例模式:只能有一个实例,永远用的都是一个实例)
return okHttpUtil;
}
开始封装请求方法post,get(异步)
POST
public void Post(RequestBody requestBody, String Urlstring, Callback callback){
Request request = new Request.Builder()
.method("POST",requestBody) //需要传进参数,请求体对象
.url(Urlstring) //需要传进参数,网址
.build();
//得到请求对象
Call call = okHttpClient.newCall(request);
//异步请求开始
call.enqueue(callback); //需要传进参数,callback接口
}
GET
//封装get请求,异步
public void get(String Urlstring,Callback callback){
Request request = new Request.Builder()
.url(Urlstring)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
如果okhttp的封装思想理解了,可以选择使用OKGO(原理差不多),但是封装的比较强大,也非常简单导入一个依赖可以了