addInterceptor(logger) для OkHttpClient
У меня есть следующий класс в Kotlin, чтобы установить QueryParam для HttpUrl:
import okhttp3.Interceptor
import okhttp3.Response
import java.io.IOException
class RequestInterceptor : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val original = chain.request()
val originalHttpUrl = original.url()
val url = originalHttpUrl.newBuilder()
.addQueryParameter("api_key", "")
.build()
val request = original.newBuilder().url(url).build()
return chain.proceed(request)
}
}
И это нужно инициализировать следующим образом:
val logger = RequestInterceptor()
С другой стороны, у меня есть следующий код для установки уровня журнала для перехватчика:
val logger = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger {
Log.d("API", it)
})
logger.level = HttpLoggingInterceptor.Level.BASIC
В конце я хочу установить Interceptor в качестве клиента для OkHttpClient:
val client = OkHttpClient.Builder()
.addInterceptor(logger)
.build()
Проблема заключается в следующем: как получить одновременно определение класса и уровень журнала, чтобы addInterceptor(logger)
?
1 ответ
Решение
Вы можете добавить несколько interceptors
используя код ниже
val client = OkHttpClient.Builder().build()
client.interceptors().add(RequestInterceptor()) //<--- 1
val logger = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger {
Log.d("API", it)
})
logger.level = HttpLoggingInterceptor.Level.BASIC
client.interceptors().add(logger) //< --- 2