addInterceptor перехватить NullPointException. в Retrofit2 - PullRequest
0 голосов
/ 27 апреля 2020

Я получил эту ошибку:

Fatal Exception: kotlin.KotlinNullPointerException
com.example.manager.helper.my_api.MyServiceGenerator$createService$$inlined$-addInterceptor$1.intercept (Interceptor.kt:81)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.kt:100)
okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp (RealCall.kt:197)
okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.kt:502)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133)
java.lang.Thread.run (Thread.java:762)

И я понятия не имею, почему это вызвало.

Я реализовал:

        val logging = HttpLoggingInterceptor()

        if (BuildConfig.DEBUG) { // If Build is Debug Mode, Show Log
            logging.level = HttpLoggingInterceptor.Level.BODY // Logs request and response lines and their respective headers and bodies (if present).
        } else { // Otherwise, show nothing.
            logging.level = HttpLoggingInterceptor.Level.NONE // No logs
        }

        val client = OkHttpClient.Builder()
        client.addInterceptor {
            val original = it.request()

            val request = original.newBuilder()
                    .header("User-Agent", MyApp.httpUserAgent!!)
                    .build()

            it.proceed(request)
        }

        client.addInterceptor(logging)
                .connectTimeout(30, TimeUnit.SECONDS)
                .callTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Если вы используете !! в своих кодах, вы должны использовать его с нулевой проверкой. Как это

if(MyApp.httpUserAgent != null) {
    val request = original.newBuilder()
                          .header("User-Agent", MyApp.httpUserAgent!!)
                          .build()
else {
    //here do something in case of null
}
0 голосов
/ 27 апреля 2020

Вы не закончили сборку своего клиента. Вот почему это ноль. В общем, вы забыли вызвать метод build ().

Вот как это должно быть реализовано.

    val client = OkHttpClient.Builder()
            .addInterceptor(logging)
            .connectTimeout(30, TimeUnit.SECONDS)
            .callTimeout(30, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .build()
...