package org.telegram.network;
import android.text.TextUtils;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import org.telegram.network.log.LogInterceptor;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Retrofit
*/
public class RetrofitClient {
private static Retrofit sRetrofit;
private RetrofitClient() {
OkHttpClient.Builder client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)//设置超时时间
.retryOnConnectionFailure(true)
// .addInterceptor(HeadInterceptor.getDefaultFixedHeaderInterceptor())//设置头部信息
// .addInterceptor(new BodyInterceptor())//添加统一的 body 和签名
.addInterceptor(getDefaultFixedHeaderInterceptor())//统一添加类型
.addInterceptor(LogInterceptor.getLogInterceptor())//打印 log
;
sRetrofit = new Retrofit.Builder()
.client(client.build())
.baseUrl(UrlConfig.getInstance().BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
// .addConverterFactory(ErrorCodeConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static Interceptor genericClient() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
RequestBody body = chain.request().body();
try {
if (body == null) {
FormBody.Builder builder = new FormBody.Builder();
body = builder.build();
}
MediaType mediaType = body.contentType();
Field field = mediaType.getClass().getDeclaredField("mediaType");
field.setAccessible(true);
field.set(mediaType, "application/json");
} catch (Exception e) {
e.printStackTrace();
}
return chain.proceed(chain.request().newBuilder().post(body).build());
}
};
}
/**
* 默认的固定请求参数的拦截器
*/
public static Interceptor getDefaultFixedHeaderInterceptor() {
return new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder builder = request.newBuilder();
Map<String, String> fixedHeaders = new HashMap<>();
fixedHeaders.put("Content-Type", "application/json");
Iterator var5 = fixedHeaders.entrySet().iterator();
while (var5.hasNext()) {
Map.Entry<String, String> entry = (Map.Entry) var5.next();
String key = entry.getKey();
String value = entry.getValue();
if (!TextUtils.isEmpty(key) && !TextUtils.isEmpty(value)) {
builder.header(key, value);
}
}
return chain.proceed(builder.build());
}
};
}
private static class SingleInstance {
static RetrofitClient sApiClient = new RetrofitClient();
}
public static RetrofitClient getInstance() {
return SingleInstance.sApiClient;
}
public <T> T request(Class<T> tClass) {
return sRetrofit.create(tClass);
}
}