OkHttpClient的addInterceptor(logger)

时间:2018-11-05 18:22:15

标签: android kotlin okhttp

我在Kotlin中有以下课程,可以为HttpUrl设置QueryParam:

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 个答案:

答案 0 :(得分:2)

您可以使用以下代码添加多个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