首页 > 解决方案 > crashlytics 上的常量 Dns.java 第 5 行错误

问题描述

我在我的应用程序中实现了我的 okhttp 客户端,如下所示:

fun getOkhttpClient(): OkHttpClient {
val chuckerCollector = ChuckerCollector(
    context = MyApplication.appInstance!!,
    // Toggles visibility of the push notification
    showNotification = BuildConfig.DEBUG,
    // Allows to customize the retention period of collected data
    retentionPeriod = RetentionManager.Period.ONE_WEEK
)

// Create the Interceptor
val chuckerInterceptor = ChuckerInterceptor.Builder(MyApplication.appInstance!!)
    // The previously created Collector
    .collector(chuckerCollector)
    // The max body content length in bytes, after this responses will be truncated.
    .maxContentLength(250_000L)
    .alwaysReadResponseBody(BuildConfig.DEBUG)
    .build()

val executorService: ExecutorService =
    ThreadPoolExecutor(20, 20, 1, TimeUnit.HOURS, LinkedBlockingQueue())
val myDispatcher = Dispatcher(executorService)

return OkHttpClient.Builder()
    .connectTimeout(15000, TimeUnit.MILLISECONDS)
    .retryOnConnectionFailure(true)
    .readTimeout(60, TimeUnit.SECONDS)
    .writeTimeout(60, TimeUnit.SECONDS)
    .protocols(listOf(Protocol.HTTP_1_1))
    .addInterceptor(HeaderInterceptor())
    .addInterceptor(chuckerInterceptor)
    .dispatcher(myDispatcher)
    .apply {
        if (BuildConfig.DEBUG) {
            val logging = HttpLoggingInterceptor()
            logging.setLevel(HttpLoggingInterceptor.Level.BODY)
            addInterceptor(logging)
        }
    }
    .build()
}

第一次打开应用程序一切正常。将应用程序置于后台大约 30 到 40 分钟,然后返回应用程序。调用任何api,它会给 -

非致命异常:java.net.UnknownHostException 无法解析主机“host_url”:没有与主机名关联的地址 java.net.Inet6AddressImpl.lookupHostByName (Inet6AddressImpl.java:157) java.net.Inet6AddressImpl.lookupAllHostAddr (Inet6AddressImpl.java:105 ) java.net.InetAddress.getAllByName (InetAddress.java:1154) okhttp3.Dns$Companion$DnsSystem.lookup (Dns.java:5) okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:133) okhttp3.internal .connection.RouteSelector.nextProxy (RouteSelector.java:20) okhttp3.internal.connection.RouteSelector.next (RouteSelector.java:17) okhttp3.internal.connection.ExchangeFinder.findConnection (ExchangeFinder.java:196) okhttp3.internal.connection .ExchangeFinder.findHealthyConnection (ExchangeFinder.java) okhttp3.internal.connection.ExchangeFinder。找到 (ExchangeFinder.java:47) okhttp3.internal.connection.RealCall.initExchange$okhttp (RealCall.java:31) okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:11) okhttp3.internal.http.RealInterceptorChain。继续 (RealInterceptorChain.java:166) okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:191) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.http.BridgeInterceptor.intercept ( BridgeInterceptor.java:167) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:34) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain. java:166) com.chuckerteam.chucker.api.ChuckerInterceptor.intercept (ChuckerInterceptor.java:9) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) com.pharmasentinel.medsii.retrofit.HeaderInterceptor.intercept (HeaderInterceptor.java:37) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain. java:166) okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker ( ThreadPoolExecutor.java:1167) java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)继续 (RealInterceptorChain.java:166) okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent。 ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)继续 (RealInterceptorChain.java:166) okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent。 ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)

由 android.system.GaiException 引起 android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) libcore.io.Linux.android_getaddrinfo (Linux.java) libcore.io.BlockGuardOs.android_getaddrinfo (BlockGuardOs.java:172) java.net.Inet6AddressImpl。 lookupHostByName (Inet6AddressImpl.java:137) java.net.Inet6AddressImpl.lookupAllHostAddr (Inet6AddressImpl.java:105) java.net.InetAddress.getAllByName (InetAddress.java:1154) okhttp3.Dns$Companion$DnsSystem.lookup (Dns.java: 5) okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:133) okhttp3.internal.connection.RouteSelector.nextProxy (RouteSelector.java:20) okhttp3.internal.connection.RouteSelector.next (RouteSelector.java:17) okhttp3.internal.connection.ExchangeFinder.findConnection (ExchangeFinder.java:196) okhttp3.internal.connection.ExchangeFinder。findHealthyConnection (ExchangeFinder.java) okhttp3.internal.connection.ExchangeFinder.find (ExchangeFinder.java:47) okhttp3.internal.connection.RealCall.initExchange$okhttp (RealCall.java:31) okhttp3.internal.connection.ConnectInterceptor.intercept ( ConnectInterceptor.java:11) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:191) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain. java:166) okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:167) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java: 34)okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:166) com.chuckerteam.chucker.api.ChuckerInterceptor.intercept (ChuckerInterceptor.java:9) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) com.pharmasentinel.medsii.retrofit.HeaderInterceptor.intercept ( HeaderInterceptor.java:37) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall。运行 (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (线程.java:764)继续 (RealInterceptorChain.java:166) com.pharmasentinel.medsii.retrofit.HeaderInterceptor.intercept (HeaderInterceptor.java:37) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.connection.RealCall。 getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent。 ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)继续 (RealInterceptorChain.java:166) com.pharmasentinel.medsii.retrofit.HeaderInterceptor.intercept (HeaderInterceptor.java:37) okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:166) okhttp3.internal.connection.RealCall。 getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent。 ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent。 ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)getResponseWithInterceptorChain$okhttp (RealCall.java:113) okhttp3.internal.connection.RealCall$AsyncCall.run (RealCall.java:51) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) java.util.concurrent。 ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) java.lang.Thread.run (Thread.java:764)

我正在使用 try catch 从我的拦截器中记录。

打开任何其他应用程序,它们都可以正常工作。杀死应用程序并重新启动可以解决问题,有时在 wifi 和蜂窝之间切换也可以解决问题。

标签: androidnetworkingretrofitretrofit2okhttp

解决方案


推荐阅读