我正在尝试使用Uri.getQueryParameter(String key)从 URL 字符串解析查询参数,但该方法返回null
传入的键。我使用的那个 URL 是/endpoint/path?query1=foo&page[size]=1
. 我能够成功获取query1
参数的值,但不能成功获取page[size]
(该方法返回null
此键)。我的代码如下所示:
import android.net.Uri
val uri = Uri.parse("/endpoint/path?query1=foo&page[size]=1")
val queryParameterNames = uri.getQueryParameterNames()
println(queryParameterNames) // prints ["query1", "page[size]"]
val map = mutableMapOf<String, String>()
queryParameterNames.forEach { name ->
map[name] = uri.getQueryParameter(name) ?: ""
}
println(map) // prints {query1=foo, page[size]=}
从最后一行的输出中可以看出, 的值为page[size]
空。我怀疑它与[
,]
查询参数名称中的字符有关page[size]
,它们在查找值时被 url 编码,但我不确定为什么这实际上是失败的。所以,我在这里有几个问题:
page[size]
从 Android 中的 url 字符串中获取参数的值?我认为 Android 的Uri
实现对这些方括号感到困惑,因为它们似乎是无效的 URL 语法。
如果您控制 Web 服务,您可能会重新考虑使用方括号,因为它们可能会导致其他客户端出现问题。否则,您可能需要玩一些讨厌的正则表达式游戏来用转义的等效项替换这些方括号,或者在完全解析 URL 之前找到清理 URL 的方法Uri
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句