Pu Zhibing
2025-12-11 ab0c19e49fabdb8cc6eea454ea455bce2efbb718
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
package com.igo.user.network
 
import android.util.Log
import cn.sinata.xldutils.utils.SPUtils
import com.igo.user.utils.Const
import okhttp3.FormBody
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
 
/**
 * 网络请求retrofit初始化。
 */
class RRetrofit private constructor() {
 
    private val retrofit: Retrofit = Retrofit.Builder()
            .baseUrl(Apis.BASE_URL)
            .addConverterFactory(JsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(OkHttpClient.Builder()
                    .addInterceptor(HttpLoggingInterceptor().apply {
                        level = HttpLoggingInterceptor.Level.BODY
                    })
                .addInterceptor { chain ->
                    //1=简体中文,2=英语,3=印尼语
                    val language = SPUtils.instance().getString("language", "en")
                    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
                                    )
                                )
                            }
                        }
                        formBody = bodyBuilder.addEncoded(
                            "language", when (language) {
                                "ch" -> "1"
                                "fr" -> "3"
                                else -> "2"
                            }
                        ).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)
                }
                .build())
            .build()
 
    companion object {
        fun instance() = RRetrofit()
    }
 
    fun <T> create(clazz: Class<T>): T = retrofit.create(clazz)
}