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 create(clazz: Class): T = retrofit.create(clazz) }