如何在Kotlin中对查询参数进行URL编码

21

我刚开始学习Kotlin,现在正在尝试对带有查询参数的URL进行URL编码。

private const val HREF = "date?July 8, 2019"
private const val ENCODED_HREF = print(URLEncoder.encode(HREF, "utf-8"))
private const val URL = "www.example.com/"+"$ENCODED_HREF"

错误: 常量 'val' 的类型为 'Unit'。仅允许基本类型和字符串用于 private const val ENCODED_HREF


请问您能否删除或重命名您的问题?这与URL编码无关,而是关于Kotlin的一个普遍误解,您将其作为有关URL的问题提出...谢谢! - Zordid
2个回答

27

Kotlin中的const表达式必须在编译时就已知。此外,正如@Stanislav指出的那样,print是一个Unit方法(即Java中的void方法),因此打印某些内容会破坏它的值。

由于您的常量是计算得出的,因此使用val(这是运行时常量)是适当的。以下代码可以编译通过。

private const val HREF = "date?July 8, 2019"
private val ENCODED_HREF = java.net.URLEncoder.encode(HREF, "utf-8")
private val URL = "www.example.com/"+"$ENCODED_HREF"

1
私有的val URL = "www.example.com/$ENCODED_HREF" - Brill Pappin
是的,字符串插值和非拼接版本更优,我只是想尽可能地对提交进行最小的更改来回答所提出的狭窄问题。 - David P. Caldwell

12

看起来print方法的返回类型是Unit,这就是为什么ENCODED_HREF有这种类型的原因。只需将URLEncoder部分从方法中删除即可修复它:

private const val ENCODED_HREF = URLEncoder.encode(HREF, "utf-8")

为什么有些人会发布明显错误的“答案”,而不是直接复制粘贴以立即查看呢? :-/ - Zordid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接