public class RetrofitHelper {
private static OkHttpClient okHttpClient;
private static HttpUtils httpUtils;
static {
initOkHttpClient();
}
/**
* 初始化OkHttpClient
*/
private static void initOkHttpClient() {
if (okHttpClient == null) {
synchronized (RetrofitHelper.class) {
if (okHttpClient == null) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.addInterceptor(new MyInterceptor())
.build();
}
}
}
}
/**
* 定义一个泛型方法
*
* @param tClass
* @param url
* @param <T>
* @return
*/
public static <T> T createAPI(Class<T> tClass, String url) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return retrofit.create(tClass);
}
public static HttpUtils getHttpUtils() {
if (httpUtils == null) {
synchronized (HttpUtils.class) {
if (httpUtils == null) {
httpUtils = createAPI(HttpUtils.class, API.HOST);
}
}
}
return httpUtils;
}
/**
* 添加公共参数拦截器
*/
static class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
HttpUrl httpUrl = request.url()
.newBuilder()
.addQueryParameter("source", "android")
.build();
Request build = request.newBuilder()
.url(httpUrl)
.build();
return chain.proceed(build);
}
}
}
public class RetrofitHelper {
private static Retrofit retrofit;
private static ServiceApi serviceApi;
/**
* 初始化Retrofit 单例模式
*/
private static Retrofit getRetrofit() {
//线程安全
if (retrofit == null) {
synchronized (RetrofitHelper.class) {
if (retrofit == null) {
//设置拦截器
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new MyInterceptor())
.addInterceptor(logging)//添加拦截器
.connectTimeout(5, TimeUnit.SECONDS)//设置连接超时
.build();
retrofit = new Retrofit.Builder()
.baseUrl(UrlsApi.BASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
}
}
}
return retrofit;
}
public static ServiceApi getServiceApi() {
if (serviceApi == null) {
synchronized (RetrofitHelper.class) {
if (serviceApi == null) {
serviceApi = getRetrofit().create(ServiceApi.class);
}
}
}
return serviceApi;
}
/**
* 添加公共参数拦截器
*/
static class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
HttpUrl httpUrl = request
.url()
.newBuilder()
.addQueryParameter("source", "android")
.build();
Request requestNew = request
.newBuilder()
.url(httpUrl)
.build();
return chain.proceed(requestNew);
}
}
}