Android Uri.fromParts和Uri.parse之间的区别?
我正在为Android创建一个发送电子邮件的意图 我对Uri.fromParts的行为感到困惑 Mi代码: 这个很好用Android Uri.fromParts和Uri.parse之间的区别?,android,email,android-intent,uri,Android,Email,Android Intent,Uri,我正在为Android创建一个发送电子邮件的意图 我对Uri.fromParts的行为感到困惑 Mi代码: 这个很好用 uri=Uri.parse( "mailto:" + toAddress + (subject != null ? ("?" + "subject=" + Uri.encode(subject)) : "") 前面的工作很好,并以mailto:john@doe.
uri=Uri.parse(
"mailto:" + toAddress +
(subject != null ?
("?" + "subject=" + Uri.encode(subject)) :
"")
前面的工作很好,并以mailto:john@doe.com?主题=测试
但如果我尝试使用Uri.from parts,则使用以下示例:
uriBuilder=Uri.fromParts("mailto",toAddress,null).buildUpon();
if (subject!=null) {
uriBuilder.appendQueryParameter("subject",subject);
}
uri=uriBuilder.build();
我犯了一个错误。最后的uri是mailto:?subject=Test
中间层是正确的,但是当我使用appendQueryParameter时,它会删除mailto方案之后的内容
你知道为什么吗?哪一种是实现这一点的标准方法?
从给定组件创建不透明Uri。对ssp进行编码,这意味着此方法不能用于创建分层URI
在此调用buildOn()
时,Builder
包含方案、方案特定部分(ssp)和片段(本例中为空)
appendQueryParameter()
然后将Builder
转换为层次结构,删除不透明的ssp数据
我不认为有一个“规范”的方式。只是不要混合层次和不透明的构建器
有关发动机罩下发生的情况的详细信息,请阅读。非常感谢您的回答!它添加了一个新的概念(至少对我来说是新的):分层URI和非分层URI。但是,接受这一点,如果appendQueryParameter将损坏非层次结构的参数,为什么不生成异常呢。我必须打开一个事件吗?