我正在创建Android的Intent,以发送电子邮件。
我对Uri.fromParts的行为感到困惑。
Mi代码: 这很好用!
uri=Uri.parse(
"mailto:" + toAddress +
(subject != null ?
("?" + "subject=" + Uri.encode(subject)) :
"")
以前的工作很好,并以#34; 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方案之后的内容。
你知道为什么吗?这是规范的方法吗?答案 0 :(得分:0)
从给定组件创建不透明的Uri。对ssp进行编码,这意味着此方法不能用于创建分层URI。
当您对此调用buildUpon()
时,Builder
包含方案,方案特定部分(ssp)和片段(在您的情况下为null)。
appendQueryParameter()
然后将Builder
转换为分层结构,删除不透明的ssp数据。
我不认为这是一种“规范”的方式。只是不要混合分层和不透明的构建器。
有关幕后情况的详细信息,请阅读source。