package com.runt.open.mvi.retrofit.utils;
|
|
|
import com.runt.open.mvi.BuildConfig;
|
import com.runt.open.mvi.retrofit.Interceptor.LogEncryptInterceptor;
|
import com.runt.open.mvi.retrofit.Interceptor.OpenInterceptor;
|
import com.runt.open.mvi.retrofit.Interceptor.EncryptInterceptor;
|
import com.runt.open.mvi.retrofit.Interceptor.HttpLoggingInterceptor;
|
import com.runt.open.mvi.retrofit.converter.DecryptGsonConverterFactory;
|
import com.runt.open.mvi.retrofit.converter.GsonConverterFactory;
|
import com.runt.open.mvi.retrofit.net.NetWorkListener;
|
|
import java.util.Collections;
|
import java.util.concurrent.TimeUnit;
|
|
import okhttp3.Interceptor;
|
import okhttp3.OkHttpClient;
|
import okhttp3.Protocol;
|
import retrofit2.Retrofit;
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
|
|
/**
|
* My father is Object, ites purpose of
|
*
|
* @purpose Created by Runt (qingingrunt2010@qq.com) on 2021-7-9.
|
*/
|
|
public class RetrofitUtils {
|
static RetrofitUtils instance;
|
Retrofit retrofit/*log输出*/,humpRetrofit/*log输出,强制驼峰转换*/,
|
unLogRetrofit/*log不输出*/,unLogHumpRetrofit/*log不输出,强制驼峰转换*/,
|
encryptRetrofit/*加密log输出*/,humpEncryptRetrofit/*加密log输出,强制驼峰转换*/,
|
unLogEncryptRetrofit/*加密log不输出*/,unLogHumpEncryptRetrofit/*加密log不输出,强制驼峰转换*/;
|
|
|
public static RetrofitUtils getInstance() {
|
if(instance == null){
|
instance = new RetrofitUtils();
|
}
|
return instance;
|
}
|
|
private Retrofit getRetrofit(OkHttpClient client,Retrofit.Builder builder,String url){
|
return builder
|
//设置OKHttpClient
|
.client(client)
|
//设置baseUrl,注意,baseUrl必须后缀"/"
|
.baseUrl(url)
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
.build();
|
}
|
|
public <T> T getTempRetrofit(Class<T> clas,String url) {
|
Interceptor interceptor = BuildConfig.DEBUG ? new HttpLoggingInterceptor() : new OpenInterceptor();
|
return getRetrofit(getOkHttpClient(new OkHttpClient.Builder().addInterceptor(interceptor)),
|
new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(true)),url).create(clas);
|
}
|
|
/**
|
* log输出
|
* @return
|
*/
|
public <T> T getRetrofit(Class<T> clas) {
|
if(!BuildConfig.DEBUG){//正式版 不打印log
|
return getUnLogRetrofit(clas);
|
}
|
return getRetrofit(clas,false,false,true);
|
}
|
|
/**
|
* log不输出,gson驼峰转换
|
* @return
|
*/
|
public <T> T getUnLogRetrofit(Class<T> clas) {
|
return getRetrofit(clas,false,false,false);
|
}
|
|
/**
|
* log输出,gson转换驼峰
|
* @return
|
*/
|
public <T> T getHumpRetrofit(Class<T> clas) {
|
if(!BuildConfig.DEBUG){//正式版 不打印log
|
return getUnLogHumpRetorfit(clas);
|
}
|
return getRetrofit(clas,true,false,true);
|
}
|
|
/**
|
* log不输出,gson转换驼峰
|
* @return
|
*/
|
public <T> T getUnLogHumpRetorfit(Class<T> clas) {
|
return getRetrofit(clas,true,false,false);
|
}
|
|
/**
|
* 加密log输出
|
* @return
|
*/
|
public <T> T getEncrptRetrofit(Class<T> clas) {
|
if(!BuildConfig.DEBUG){//正式版 不打印log
|
return getUnLogEncryptRetrofit(clas);
|
}
|
return getRetrofit(clas,false,true,true);
|
}
|
|
/**
|
* 加密log不输出
|
* @return
|
*/
|
public <T> T getUnLogEncryptRetrofit(Class<T> clas) {
|
return getRetrofit(clas,false,true,false);
|
}
|
|
/**
|
* 加密log输出 gson转换驼峰
|
* @return
|
*/
|
public <T> T getHumpEncryptRetrofit(Class<T> clas) {
|
if(!BuildConfig.DEBUG){//正式版 不打印log
|
return getUnLogHumpEncryptRetrofit(clas);
|
}
|
return getRetrofit(clas,true,true,true);
|
}
|
|
/**
|
* 加密log不输出 gson转换驼峰
|
* @return
|
*/
|
public <T> T getUnLogHumpEncryptRetrofit(Class<T> clas) {
|
return getRetrofit(clas,true,true,false);
|
}
|
|
private <T> T getRetrofit(Class<T> clzz,boolean transHump,boolean encrypt,boolean log){
|
Retrofit temp = null;
|
if(transHump && encrypt && log){
|
if(humpEncryptRetrofit == null){
|
humpEncryptRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = humpEncryptRetrofit;
|
}else if(transHump && encrypt && !log ){
|
if(unLogHumpEncryptRetrofit == null){
|
unLogHumpEncryptRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = unLogHumpEncryptRetrofit;
|
}else if(transHump && !encrypt && !log ){
|
if(unLogHumpRetrofit == null){
|
unLogHumpRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = unLogHumpRetrofit;
|
}else if(!transHump && !encrypt && !log ){
|
if(unLogRetrofit == null){
|
unLogRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = unLogRetrofit;
|
}else if(!transHump && !encrypt && log ){
|
if(retrofit == null){
|
retrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = retrofit;
|
}else if(!transHump && encrypt && log ){
|
if(encryptRetrofit == null){
|
encryptRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = encryptRetrofit;
|
}else if(!transHump && encrypt && !log ){
|
if(unLogEncryptRetrofit == null){
|
unLogEncryptRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = unLogEncryptRetrofit;
|
}else if(transHump && !encrypt && log ){
|
if(humpRetrofit == null){
|
humpRetrofit = initRetrofit(transHump,encrypt,log);
|
}
|
temp = humpRetrofit;
|
}
|
return temp.create(clzz);
|
}
|
|
private Retrofit initRetrofit(boolean transHump,boolean encrypt,boolean log){
|
Retrofit.Builder builder = new Retrofit.Builder();
|
builder.addConverterFactory(encrypt ? DecryptGsonConverterFactory.create(transHump) : GsonConverterFactory.create(transHump));
|
|
OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
|
if(log && encrypt){
|
httpBuilder.addInterceptor(new LogEncryptInterceptor());//log打印加密拦截器
|
} else if (log && !encrypt) {
|
httpBuilder.addInterceptor(new HttpLoggingInterceptor());//log打印拦截器
|
} else if (!log && encrypt) {
|
httpBuilder.addInterceptor(new EncryptInterceptor());//加密拦截器
|
} else if (!log && !encrypt) {
|
httpBuilder.addInterceptor(new OpenInterceptor());//拦截器
|
}
|
OkHttpClient httpClient = getOkHttpClient(httpBuilder);
|
return getRetrofit(httpClient,builder);
|
}
|
|
private OkHttpClient getOkHttpClient(OkHttpClient.Builder builder){
|
return builder.connectTimeout(10, TimeUnit.SECONDS)//设置连接超时时间
|
.readTimeout(30, TimeUnit.SECONDS)//设置读取超时时间
|
.protocols(Collections.singletonList(Protocol.HTTP_1_1))
|
.eventListenerFactory(NetWorkListener.get())
|
.build();
|
}
|
|
private Retrofit getRetrofit(OkHttpClient client,Retrofit.Builder builder){
|
return builder
|
//设置OKHttpClient
|
.client(client)
|
//设置baseUrl,注意,baseUrl必须后缀"/"
|
.baseUrl(BuildConfig.HOST_IP_ADDR+"api/v4/")
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
.build();
|
}
|
|
}
|