无法使用 android.net.Uri#getQueryParameter 获取查询参数值

哈利

我正在尝试使用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 编码,但我不确定为什么这实际上是失败的。所以,我在这里有几个问题:

  1. 为什么找到查询参数的名称成功,但找到对应的值却失败了?
  2. 如何page[size]从 Android 中的 url 字符串中获取参数的值?
共享软件

我认为 Android 的Uri实现对这些方括号感到困惑,因为它们似乎是无效的 URL 语法

如果您控制 Web 服务,您可能会重新考虑使用方括号,因为它们可能会导致其他客户端出现问题。否则,您可能需要玩一些讨厌的正则表达式游戏来用转义的等效项替换这些方括号,或者在完全解析 URL 之前找到清理 URL 的方法Uri

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章