【问题标题】:Conversion of SSLContext from Java to KotlinSSLContext 从 Java 到 Kotlin 的转换
【发布时间】:2022-01-27 07:09:53
【问题描述】:

我试图在使用 Kotlin 的 android 应用程序中复制这个自签名证书过程(链接:https://www.baeldung.com/okhttp-self-signed-cert)。问题是我提供的链接中的实现是用 Java 编写的,我似乎无法将此代码正确转换为其 Kotlin 版本。

sslContext.init(null, new TrustManager[] { TRUST_ALL_CERTS }, new java.security.SecureRandom());

这就是我在 Kotlin 中实现它的方式:

val sslContext: SSLContext = SSLContext.getInstance("SSL")
.init(null, arrayOf(TRUST_ALL_CERTS) as Array<TrustManager>,
    java.security.SecureRandom()) as SSLContext

我将 init 转换为 SSLContext,因为它在 Unit 中,但这样做之后,会出现以下警告:

这个演员永远不会成功

有什么办法可以解决这个问题?理论上,一旦我发布它就会导致错误,我想避免它。请帮忙。谢谢

注意:我无法在本地计算机上测试我的应用,因为该应用与不允许该应用在本地运行的服务器通信。

【问题讨论】:

    标签: java android kotlin okhttp sslcontext


    【解决方案1】:

    原子地使用 apply

    val sslContext: SSLContext = SSLContext.getInstance("SSL").apply {
      init(null, arrayOf<TrustManager>(TRUST_ALL_CERTS), java.security.SecureRandom())
    }
    

    【讨论】:

    • 它正在工作。感谢您的帮助!
    【解决方案2】:

    SSLContext.init() 正在返回 void(或 Kotlin 中的 Unit),因此您基本上是在尝试将 Unit 转换为 SSLContext,这永远不会成功

    你应该像这样单独声明:

    val sslContext: SSLContext = SSLContext.getInstance("SSL")
    sslContext.init(null, arrayOf(TRUST_ALL_CERTS) as Array<TrustManager>,
        java.security.SecureRandom())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多