目的:
简化okhttp的调用,简化代码。
工具类OkHttpUtil完整代码
注解已经详细解释,就不再进行说明。
/*
网络访问框架一般都需要单例模式(singleton),首先我们也进行单利模式。
1 首先私有化构造器,让别人不能new出其它实例。
2 声明该类的一个静态成员变量实例,本篇为instance
3 声明一个公有的方法getInstance提供给调用者本类实例。
*/
public class OkHttpUtil {
// 必须要用的Okhttpclient实例,在构造器中实例化保证单一实例
private static OkHttpClient okHttpClient;
//防止多个线程同时访问
//网络访问要求singleton
private volatile static OkHttpUtil instance;
//把构造器定义为私有的,只有OkHttpUtil类内可以调用构造器
private OkHttpUtil(){
okHttpClient = new OkHttpClient();
//请求超时设置
okHttpClient.newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.build();
}
/**
* 懒汉式双重检查加锁单例模式
*/
public static OkHttpUtil getInstance(){
if(instance == null){
synchronized (OkHttpUtil.class){
if(instance == null) {
instance = new OkHttpUtil();
}
}
}
return instance;
}
/**
* get异步请求不传参数
* 通过response.body().string()获取返回的字符串
* 异步返回值不能更新UI,要开启新线程
*/
public void Get(String url, Callback callback){
final Request request = new Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
}
工具类使用示例
OkHttpUtil.getInstance().Get(url, new okhttp3.Callback() {
@Override
public void onFailure(@NotNull okhttp3.Call call, @NotNull IOException e) {
Log.e("TAG", "get回调失败:");
//get回调失败处理事件
}
@Override
public void onResponse(@NotNull okhttp3.Call call, @NotNull okhttp3.Response response) throws IOException {
String body =response.body().string();
//get回调成功处理事件
}
});