18034727885
2026-08-14 97692c01e5103eada2ffa5da0c529b0e375a46a4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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)
}