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
Другие вопросы по тегам