将 SSLContext 从 Java 转换为 Kotlin
Conversion of SSLContext from Java to Kotlin
我试图在使用 Kotlin 的 android 应用程序中复制这个自签名证书过程(link:https://www.baeldung.com/okhttp-self-signed-cert)。问题是我在 Java 中提供的 link 中的实现,我似乎无法将此代码正确转换为其 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 中,但在这样做之后,出现此警告:
this cast can never succeed
这个问题的替代修复方法是什么?理论上一发布就会报错,想避免。请帮忙。谢谢
注意:我无法在本地计算机上测试我的应用程序,因为该应用程序与不允许该应用程序在本地 运行 的服务器进行通信。
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())
要自动执行此操作,请使用 apply
val sslContext: SSLContext = SSLContext.getInstance("SSL").apply {
init(null, arrayOf<TrustManager>(TRUST_ALL_CERTS), java.security.SecureRandom())
}
我试图在使用 Kotlin 的 android 应用程序中复制这个自签名证书过程(link:https://www.baeldung.com/okhttp-self-signed-cert)。问题是我在 Java 中提供的 link 中的实现,我似乎无法将此代码正确转换为其 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 中,但在这样做之后,出现此警告:
this cast can never succeed
这个问题的替代修复方法是什么?理论上一发布就会报错,想避免。请帮忙。谢谢
注意:我无法在本地计算机上测试我的应用程序,因为该应用程序与不允许该应用程序在本地 运行 的服务器进行通信。
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())
要自动执行此操作,请使用 apply
val sslContext: SSLContext = SSLContext.getInstance("SSL").apply {
init(null, arrayOf<TrustManager>(TRUST_ALL_CERTS), java.security.SecureRandom())
}