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

2024-01-09

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

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

小米代码: 这很好用!

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

之前的工作正常,并以以下形式创建一个 Urimailto:[email protected] /cdn-cgi/l/email-protection?subject=Test

但如果我尝试使用 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() https://developer.android.com/reference/android/net/Uri.html#fromParts(java.lang.String,%20java.lang.String,%20java.lang.String)

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

你打电话时buildUpon()对此,Builder包含方案、方案特定部分(ssp)和片段(在您的情况下为 null)。

appendQueryParameter()然后转动Builder到层次结构,删除不透明的 ssp 数据。

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

有关幕后发生的详细信息,请阅读source http://androidxref.com/8.0.0_r4/xref/frameworks/base/core/java/android/net/Uri.java.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Uri.fromParts 和 Uri.parse 之间的区别? 的相关文章

随机推荐