package com.example.smart.reqeust import android.annotation.SuppressLint import androidx.multidex.BuildConfig import com.example.smart.reqeust.interceptor.LoggingInterceptor import com.example.smart.reqeust.interceptor.HeaderInterceptor import com.example.smart.reqeust.interceptor.LoggingInterceptorZmc import com.google.gson.Gson import okhttp3.* import okhttp3.MediaType.Companion.toMediaTypeOrNull import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import java.util.concurrent.TimeUnit /** * @Description 网络请求 */ object RetrofitClient { private val baseUrl: String = rootUrl() private const val DEFAULT_TIMEOUT = 30L const val serverUrl = "http://47.108.113.190:8182/" // const val serverUrl = "http://192.168.110.111:8182/" private fun rootUrl(): String { return serverUrl } fun getRootUrl() = baseUrl private val stsRootUrl = "http://47.93.28.249:7080/" private var retrofit: Retrofit private var ossRequest: Retrofit /** * init代码块实际上会放到构造函数里面执行 * 而构造函数里面的代码会在init之后执行 * 多个init 按代码里的顺序执行 */ init { val okHttpClient = okHttpClientHeader() retrofit = Retrofit.Builder() .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) // .addCallAdapterFactory(CoroutineCallAdapterFactory()) .baseUrl(baseUrl) .build() val ossClient = okHttpClientHeader() ossRequest = Retrofit.Builder() .client(ossClient) .addConverterFactory(GsonConverterFactory.create()) // .addCallAdapterFactory(CoroutineCallAdapterFactory()) .baseUrl(stsRootUrl) .build() } fun create(service: Class): T = retrofit.create(service) fun createOss(service: Class): T = ossRequest.create(service) val gson by lazy { Gson() } val api by lazy { create(ApiService::class.java) } val ossApi by lazy { createOss(ApiService::class.java) } @SuppressLint("SuspiciousIndentation") fun okHttpClientHeader(): OkHttpClient { val builder = OkHttpClient.Builder() .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .writeTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .readTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS) .addInterceptor(HeaderInterceptor()) .addInterceptor(LoggingInterceptorZmc()) return builder.build() } fun getBody(map: Map): RequestBody { return RequestBody.create( "application/json; charset=utf-8".toMediaTypeOrNull(), gson.toJson(map) ) } }