У меня такая же проблема. Это началось после переписывания всех запросов от Rx к сопрограммам. Отчеты отображаются в Play Console и Crashlytics с разными исключениями.
Вот пример моего кода:
@Singleton
@Provides
fun providesApi(client: OkHttpClient, gsonConverterFactory: GsonConverterFactory): Api {
return Retrofit.Builder()
.baseUrl("https://url")
.client(client.newBuilder().addInterceptor { chain ->
val request = chain.request().newBuilder()
.addHeader("Header1", ...)
.addHeader("Header2", ...)
.build()
chain.proceed(request)
}.build())
.addConverterFactory(gsonConverterFactory)
.build()
.create(Api::class.java)
}
viewModelScope.launch {
try {
val response = api.request()
} catch (e: Exception) {
Log.e("TAG", "Error", e)
}
}
Отчеты показывают, что он падает на chain.proceed(request)
. Но когда я пытаюсь воспроизвести его, установив тайм-аут на 1 секунду или даже вручную выдав исключение внутри перехватчика, все исключения попадают внутрь блока try, и он вообще не обрабатывает sh. Примеры исключений:
java.net.SocketTimeoutException:
at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException (Http2Stream.java:4)
at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut (Http2Stream.java:8)
at okhttp3.internal.http2.Http2Stream.takeHeaders (Http2Stream.java:24)
at okhttp3.internal.http2.Http2Codec.openResponseBody (Http2Codec.java:2)
at okhttp3.internal.http.CallServerInterceptor.intercept (CallServerInterceptor.java:27)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:4)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:69)
at okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:69)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:27)
at okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:27)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:70)
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.http.RealInterceptorChain.a (RealInterceptorChain.java:6)
at myproject.dagger.Module$providesApi$1.intercept (Module.java:4) <------------------ HERE
at okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:2)
at okhttp3.internal.http.RealInterceptorChain.a (RealInterceptorChain.java:6)
at okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:12)
at okhttp3.RealCall$AsyncCall.execute (RealCall.java:9)
at okhttp3.internal.NamedRunnable.run (NamedRunnable.java:17)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
at java.lang.Thread.run (Thread.java:764)
Или
retrofit2.HttpException:
at retrofit2.KotlinExtensions$await$2$2.onResponse (KotlinExtensions.java:2)
at retrofit2.OkHttpCall$1.onResponse (OkHttpCall.java)
at okhttp3.RealCall$AsyncCall.a (RealCall.java)
at okhttp3.internal.NamedRunnable.run (NamedRunnable.java)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:587)
at java.lang.Thread.run (Thread.java:841)
Действительно расстраивает, когда я получаю тысячи отчетов каждый день.