package com.xw.common.net
|
|
import com.xw.common.Constants.gson
|
import com.xw.common.net.interceptor.HeaderInterceptor
|
import com.xw.common.net.interceptor.LoggingInterceptor
|
import okhttp3.HttpUrl.Companion.toHttpUrl
|
import okhttp3.Interceptor
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
import okhttp3.OkHttpClient
|
import okhttp3.RequestBody
|
import retrofit2.Retrofit
|
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.scalars.ScalarsConverterFactory
|
import java.util.concurrent.TimeUnit
|
|
class BaseHttpManager private constructor() {
|
|
companion object {
|
@Volatile
|
private var instance: BaseHttpManager? = null
|
|
fun getInstance(): BaseHttpManager {
|
return instance ?: synchronized(this) {
|
instance ?: BaseHttpManager().also { instance = it }
|
}
|
}
|
|
fun getBody(map: Map<String, Any?>): RequestBody {
|
return RequestBody.create(
|
"application/json; charset=utf-8".toMediaTypeOrNull(),
|
gson.toJson(map)
|
)
|
}
|
|
}
|
|
fun <T> create(
|
baseUrl: String,
|
c: Class<T>,
|
interceptor: Interceptor = HeaderInterceptor()
|
): T {
|
return Retrofit.Builder()
|
.baseUrl(baseUrl.toHttpUrl())
|
.client(provideOKHttpClient(interceptor))
|
.addConverterFactory(ScalarsConverterFactory.create())
|
.addConverterFactory(GsonConverterFactory.create())
|
.build()
|
.create(c)
|
}
|
|
private fun provideOKHttpClient(interceptor: Interceptor): OkHttpClient {
|
val builder = OkHttpClient.Builder()
|
.connectTimeout(30, TimeUnit.SECONDS)
|
.readTimeout(30, TimeUnit.SECONDS)
|
.writeTimeout(30, TimeUnit.SECONDS)
|
.retryOnConnectionFailure(true)
|
.addInterceptor(interceptor)
|
.addInterceptor(LoggingInterceptor())
|
return builder.build()
|
}
|
|
}
|