我尝试从一个file
对象获取一个Uri
,如下所示:
File file = new File("/sdcard/MyFolder/MyFile.txt");
var androidUri = Android.Net.Uri.FromFile(file).ToString();
var javaUri = file.ToURI().ToString();
这将返回以下值:
androidUri = "file:///sdcard/MyFolder/MyFile.txt"
javaUri = "file:/sdcard/MyFolder/MyFile.txt"
所以我的问题是Java.Net.Uri
和Android.Net.Uri
之间的区别是什么?这两个值应该是不同的吗?什么时候应该使用它们?
更新
我找到了两个文档页面Java.Net.Uri和Android.Net.Uri,它们都说:
构建并解析符合RFC 2396的URI引用。
这是一个错误,他们应该返回相同的字符串?
3条答案
按热度按时间utugiqy61#
不同之处在于
Android.Net.Uri
是Google自己对RFC 2396的实现。Android.Net.Uri
是不可变的,因此它是线程安全的。根据comments in the source,它们的实现也更宽容。因此,当Java.Net.Uri
试图使用垃圾Uri时,它会抛出Exception
,而Android实现只会返回一个带有垃圾的Uri。据我所知,
Android.Net.Uri
只会抛出NullPointerException,似乎没有其他异常。否则它们看起来非常相似。
你得到的URI
file:/sdcard/MyFolder/MyFile.txt
是有效的,当把它扔到java.net.URI
上时,我得到了以下内容:dojqjjoe2#
这里有一个实际的区别:
uri支持IPv4和IPv6地址,而android.net.uri only support IPv4 .
r7xajy2e3#
另一个区别:
android.net.Uri
有getQueryParameter(String)
(以及一些相关的方法)来获取单独的查询参数。java.net.URI
只有getRawQuery()
和getQuery()
。这些方法返回整个查询字符串,例如foo=1&bar=2
。因此,如果您需要访问单独的查询参数,
android.net.Uri
可能更方便。