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 getTempRetrofit(Class 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 getRetrofit(Class clas) { if(!BuildConfig.DEBUG){//正式版 不打印log return getUnLogRetrofit(clas); } return getRetrofit(clas,false,false,true); } /** * log不输出,gson驼峰转换 * @return */ public T getUnLogRetrofit(Class clas) { return getRetrofit(clas,false,false,false); } /** * log输出,gson转换驼峰 * @return */ public T getHumpRetrofit(Class clas) { if(!BuildConfig.DEBUG){//正式版 不打印log return getUnLogHumpRetorfit(clas); } return getRetrofit(clas,true,false,true); } /** * log不输出,gson转换驼峰 * @return */ public T getUnLogHumpRetorfit(Class clas) { return getRetrofit(clas,true,false,false); } /** * 加密log输出 * @return */ public T getEncrptRetrofit(Class clas) { if(!BuildConfig.DEBUG){//正式版 不打印log return getUnLogEncryptRetrofit(clas); } return getRetrofit(clas,false,true,true); } /** * 加密log不输出 * @return */ public T getUnLogEncryptRetrofit(Class clas) { return getRetrofit(clas,false,true,false); } /** * 加密log输出 gson转换驼峰 * @return */ public T getHumpEncryptRetrofit(Class clas) { if(!BuildConfig.DEBUG){//正式版 不打印log return getUnLogHumpEncryptRetrofit(clas); } return getRetrofit(clas,true,true,true); } /** * 加密log不输出 gson转换驼峰 * @return */ public T getUnLogHumpEncryptRetrofit(Class clas) { return getRetrofit(clas,true,true,false); } private T getRetrofit(Class 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/v2/") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); } }