gpt4 book ai didi

Android 应用程序崩溃 okhttp3 HTTP FAILED : javax.net.ssl.SSLException : Read error: I/O error during system call, 软件导致连接中止

转载 作者:行者123 更新时间:2023-12-03 17:23:34 38 4
gpt4 key购买 nike

我正在开发 android 原生 kotlin 项目。
我正在 android real 中测试应用程序 一加6 带有 的设备安卓版本 10 .
请从 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())
}
}
观察/问题
  • 如果 API 调用正在进行,并且我们尝试更改或禁用网络/互联网,那么只要从上面的代码 fragment 执行下面的行,okhttp3 本身就会在内部崩溃,因此应用程序正在崩溃。return chain.proceed(requestBuilder.build())

  • 我已经想通了 okhttp 内部崩溃日志 来自我的 android 工作室,可以帮助您找到根本原因和修复。
    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 将拦截器 fragment 包装在上面,但 okhttp3 本身仍然崩溃,因此 App 崩溃了。
    我们没有任何控制来解决它。
    请在下面找到带有包装的 try-catch 实现的拦截器 fragment 。
    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")
    .addHeader("Accept", "application/json")

    try {
    return chain.proceed(requestBuilder.build())
    }catch (e: Throwable) {

    if (e is IOException) {

    throw e
    } else {

    throw IOException(e)
    }
    }
    }
    }
    任何人都可以尝试使用相关设置和代码 fragment 制作小型 android 项目并查看。
    请为世界上许多人面临的这个阻止程序问题提供必要的修复或方法。
    如果您需要更多详细信息,请告诉我。我很乐意为您提供。

    最佳答案

    我正在努力解决这个问题。这个错误并不奇怪。
    正如你所说

    If API call is in progress and we try to change or disablenetwork/internet, okhttp3 itself internally crashing as soon as belowline executes from above snippets so App is crashing.


    为什么这对你来说如此奇怪?
    如日志所示
    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
    你有一个 SSL/TLS 连接,这意味着,在建立与服务器的连接并传输数据之前,有很多事情是透明地发生的,例如:
  • 握手
  • 发送/接收公钥
  • 生成 session key
  • 建立安全通道

  • 上述操作以及安全通道仅对当前连接的安全套接字有效,对任何其他安全套接字均无效。
    再次支持你的说法

    If API call is in progress and we try to change or disablenetwork/internet


    上述 Action 使之前连接的安全套接字无效,并抛出了 SslException(MitM 保护)。
    我希望以上陈述对您有所帮助。

    关于Android 应用程序崩溃 okhttp3 HTTP FAILED : javax.net.ssl.SSLException : Read error: I/O error during system call, 软件导致连接中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64131139/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com