Uri.fromParts 和 Uri.parse 之间的区别



我正在为Android创建一个Intent,用于发送电子邮件。

我对 Uri.fromParts 的行为感到困惑。

小米码:这工作正常!

uri=Uri.parse(
  "mailto:" + toAddress +
    (subject != null ?
      ("?" + "subject=" + Uri.encode(subject)) :
      "")

前面的工作很好,并以mailto:john@doe.com?subject=Test的形式创建一个 Uri

但是,如果我尝试使用 Uri.from 部件,则此示例:

uriBuilder=Uri.fromParts("mailto",toAddress,null).buildUpon();
if (subject!=null) {
    uriBuilder.appendQueryParameter("subject",subject);
}
uri=uriBuilder.build();

我收到一个错误。最后一个 uri 是mailto:?subject=Test

中间是正确的,但是当我使用 appendQueryParameter 时,它会删除 mailto 方案之后的内容。

你知道为什么吗?这是这样做的规范方法吗?

Uri#fromParts()

从给定组件创建不透明 Uri。对 ssp 进行编码,这意味着此方法不能用于创建分层 URI。

当您对此调用buildUpon()时,Builder包含方案、特定于方案的部分 (ssp( 和片段(在您的情况下为 null(。

然后,appendQueryParameter()Builder转换为分层,删除不透明的 SSP 数据。

我认为没有"规范"的方式。只是不要混合分层和不透明的构建器。

有关引擎盖下发生的情况的详细信息,请阅读来源。

相关内容

  • 没有找到相关文章

最新更新