Android应用程序崩溃okhttp3 HTTP失败:javax.net.ssl.SSLException:读取错误:系统调用期间发生I / O错误,软件导致连接中断

问题描述

我正在研究android native kotlin项目。
我正在使用 Android版本10 的Android真正的 Oneplus 6 设备中测试应用程序。
请从build.gradle文件中找到以下详细信息,以获取我用于项目的最新okhttp和改造依赖项。
确定http

implementation "com.squareup.okhttp3:okhttp:4.9.0"
implementation "com.squareup.okhttp3:logging-interceptor:4.9.0"` 

改造

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

我已经为okhttpclient设置了相关的超时时间。

.connectTimeout(HTTP_CONNECT_TIMEOUT,TimeUnit.SECONDS)
.readTimeout(HTTP_READ_TIMEOUT,TimeUnit.SECONDS)
.writeTimeout(HTTP_WRITE_TIMEOUT,TimeUnit.SECONDS)

我正在使用 okhttp3.Interceptor 。请在下面找到实现。

import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response

class AuthorizationInterceptor(private val sharedPreferenceService: SharedPreferenceService) :
    Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        val requestBuilder = chain.request().newBuilder()
            .addHeader("Content-Type","application/json")
            .addHeader("Accept","application/json")

        return chain.proceed(requestBuilder.build())
    }
  }

观察/问题

  1. 如果正在进行API调用,并且我们尝试更改或禁用网络/互联网,则从上面的代码片段执行以下行后,okhttp3本身就会内部崩溃,因此App崩溃了。 return chain.proceed(requestBuilder.build())

我从Android Studio中找出了以下 okhttp内部崩溃日志,可以帮助您找到根本原因并解决。

FATAL EXCEPTION: main
    Process: com.pg.posm,PID: 8770
    javax.net.ssl.SSLException: Read error: ssl=0x7afca87588: I/O error during system call,Software caused connection abort
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.pg.posm,PID: 26238
    java.net.ConnectException: Failed to connect to hostname/ip:port

我还尝试使用try-catch来包装以上拦截器片段,但okhttp3本身仍然崩溃,因此App崩溃了。
我们没有控制权来解决它。
请在下面找到带有包装的try-catch实现的拦截器摘要。

import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
import timber.log.Timber
import java.io.IOException

class AuthorizationInterceptor(private val sharedPreferenceService: SharedPreferenceService) :
    Interceptor {

    @Throws(IOException::class)
    override fun intercept(chain: Interceptor.Chain): Response {
        val requestBuilder = chain.request().newBuilder()
            .addHeader("Content-Type","application/json")
     
        try {
            return chain.proceed(requestBuilder.build())
        }catch (e: Throwable) {
            
            if (e is IOException) {
                
                throw e
            } else {
                
                throw IOException(e)
            }
        }
    }   
}

任何人都可以尝试制作带有相关设置和代码片段的小型android项目,然后看看。
请为世界上许多人面临的这种阻塞问题提供必要的解决方法。
如果您需要更多详细信息,请告诉我。我很乐意为您提供。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)