1

我试图在使用 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 中,但这样做之后,会出现以下警告:

这个演员永远不会成功

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

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

4

2 回答 2

1

原子地使用 apply

val sslContext: SSLContext = SSLContext.getInstance("SSL").apply {
  init(null, arrayOf<TrustManager>(TRUST_ALL_CERTS), java.security.SecureRandom())
}
于 2022-01-27T08:05:12.077 回答
0

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

您应该像这样单独声明:

val sslContext: SSLContext = SSLContext.getInstance("SSL")
sslContext.init(null, arrayOf(TRUST_ALL_CERTS) as Array<TrustManager>,
    java.security.SecureRandom())
于 2022-01-27T07:36:06.693 回答