package com.igo.user.network
|
|
import android.util.Log
|
import cn.sinata.xldutils.utils.LanguageUtil
|
import cn.sinata.xldutils.utils.SPUtils
|
import com.igo.user.BuildConfig
|
import com.igo.user.utils.Const
|
import okhttp3.FormBody
|
import okhttp3.OkHttpClient
|
import retrofit2.Retrofit
|
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
|
|
/**
|
* 网络请求retrofit初始化。
|
*/
|
class RRetrofit private constructor() {
|
|
private val loggingInterceptor by lazy {
|
LoggingInterceptor()
|
}
|
|
private val retrofit: Retrofit = Retrofit.Builder()
|
.baseUrl(Apis.BASE_URL)
|
.addConverterFactory(JsonConverterFactory.create())
|
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
|
.client(
|
OkHttpClient.Builder()
|
.addInterceptor { chain ->
|
var request = chain.request()
|
if (request.method() == "POST" && !request.url().toString()
|
.contains("base/user/image")
|
) {
|
val bodyBuilder = FormBody.Builder()
|
var formBody: FormBody
|
if (request.body() is FormBody) {
|
formBody = request.body() as FormBody
|
(0 until formBody.size()).forEach {
|
bodyBuilder.addEncoded(
|
formBody.encodedName(it), formBody.encodedValue(
|
it
|
)
|
)
|
}
|
}
|
var language = request.header("language")
|
language = if (language.isNullOrEmpty()) {
|
LanguageUtil.getLanguage()!!
|
} else {
|
language
|
}
|
//1=简体中文,2=英语,3=法语
|
formBody = bodyBuilder.addEncoded("language", getLanguageType(language)).build()
|
request = request.newBuilder().post(formBody).build()
|
}
|
chain.proceed(request)
|
}
|
.addInterceptor { chain ->
|
val token = SPUtils.instance().getString(Const.User.TOKEN)
|
val request =
|
if (token.isEmpty()) chain.request() else
|
chain.request().newBuilder().addHeader("Authorization", "Bearer $token")
|
.build()
|
Log.e(Const.Tag, request.headers().toString())
|
chain.proceed(request)
|
}
|
.apply {
|
if (BuildConfig.DEBUG) {
|
addInterceptor(loggingInterceptor)
|
}
|
}
|
.build())
|
.build()
|
|
companion object {
|
fun instance() = RRetrofit()
|
fun getLanguageType(language: String): String {
|
return when (language) {
|
Const.Language.CHINESE -> "1"
|
Const.Language.FRENCH -> "3"
|
else -> "2"
|
}
|
}
|
}
|
|
fun <T> create(clazz: Class<T>): T = retrofit.create(clazz)
|
}
|