Uri.fromParts 和 Uri.parse 之间的区别?
Posted
技术标签:
【中文标题】Uri.fromParts 和 Uri.parse 之间的区别?【英文标题】:DIfference between Uri.fromParts and Uri.parse? 【发布时间】:2018-07-07 04:37:35 【问题描述】:我正在为 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方案之后的内容。
你知道为什么吗?执行此操作的规范方法是什么?
【问题讨论】:
【参考方案1】:Uri#fromParts()
从给定的组件创建一个不透明的 Uri。对 ssp 进行编码,这意味着此方法不能用于创建分层 URI。
当您对此调用 buildUpon()
时,Builder
包含方案、方案特定部分 (ssp) 和片段(在您的情况下为 null)。
appendQueryParameter()
然后将Builder
转换为分层结构,删除不透明的 ssp 数据。
我认为没有“规范”的方式。只是不要混合分层和不透明的构建器。
有关幕后发生的事情的详细信息,请阅读source。
【讨论】:
非常感谢您的回答!它添加了一个新概念(至少对我来说是新概念):分层与非分层 Uris。但是,接受这一点,为什么,如果 appendQueryParameter 会破坏非分层的,为什么不产生异常。我必须打开事件吗? 另见***.com/questions/31635991/…以上是关于Uri.fromParts 和 Uri.parse 之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
在 getContentResolver().query 中为 Uri.parse("content://sms/inbox") 设置日期标准