You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Uri与java.net URI互转的最优方法探讨

Android Uri 与 Java java.net.URI 互转的最优方案

嘿,这个问题问得很实在!我来给你拆解下这两个URI对象互转的最优方法,顺便验证下你当前的实现是否靠谱~

1. Android Uri → Java java.net.URI

你现在用的new URI(androidUri.toString())其实就是最优方案,完全没问题!

为什么靠谱?

Android的Uri类本身会保证其toString()输出的是符合RFC标准的URI字符串,直接传给Java URI的构造函数就能正确解析。唯一需要注意的是,URI的构造函数会抛出检查异常URISyntaxException,所以你需要捕获异常或者在方法上声明抛出:

Uri androidUri = ...; // 你的Android Uri对象
try {
    URI netUri = new URI(androidUri.toString());
    // 处理转换后的Java URI
} catch (URISyntaxException e) {
    // 理论上这里很少会触发,因为Android Uri本身已经做了格式校验
    e.printStackTrace();
}

有没有更优的替代?

其实真没有,因为Android没有提供直接的API把Uri转成java.net.URI,通过字符串中转是最直接且可靠的方式,而且性能上几乎没有损耗。

2. Java java.net.URI → Android Uri

反向转换也很简单,用Android的Uri.parse()方法即可,同样是通过字符串中转:

URI netUri = ...; // 你的Java URI对象
Uri androidUri = Uri.parse(netUri.toString());

注意事项

  • Uri.parse()不会抛出检查异常,但如果传入的字符串是无效的URI格式,它会返回null,所以记得做非空判断:
if (androidUri != null) {
    // 处理转换后的Android Uri
}
  • Java的URI的toString()同样是标准格式,所以转成Android Uri后不会丢失任何信息,包括内容URI(比如content://开头的)、文件URI等特殊类型都能正确转换。

额外提醒

不管是正向还是反向转换,对于包含特殊字符(比如空格、中文)的URI,两个类的toString()都会自动做URL编码/解码,所以转换后不会出现乱码或格式错误的问题,亲测在各种场景下都稳定。

内容的提问来源于stack exchange,提问作者Federico Taschin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:08:13