Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
224 views
in Technique[技术] by (71.8m points)

Whats the difference between Java.Net.Uri and Android.Net.Uri

I am trying to get a Uri from a file object like so:

File file = new File("/sdcard/MyFolder/MyFile.txt");
var androidUri = Android.Net.Uri.FromFile(file).ToString();
var javaUri = file.ToURI().ToString();

this returns the following values:

androidUri = "file:///sdcard/MyFolder/MyFile.txt"
javaUri = "file:/sdcard/MyFolder/MyFile.txt"

so my question is whats the difference between the Java.Net.Uri and Android.Net.Uri are these two values supposed to be different? When should they be used?

Update

I found the two documentation pages Java.Net.Uri and Android.Net.Uri and both say:

Builds and parses URI references which conform to RFC 2396.

Therefore surely this is a bug and they should return the same string?

question from:https://stackoverflow.com/questions/31560803/whats-the-difference-between-java-net-uri-and-android-net-uri

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The difference is that Android.Net.Uri is Google's own implementation of RFC 2396.

Android.Net.Uri is immutable, hence it is thread-safe. Their implementation is also, according to the comments in the source, more forgiving. So while Java.Net.Uri would throw an Exception you attempt to use a garbage Uri, the Android implementation would just return you a Uri with that garbage.

As far as I can tell, Android.Net.Uri will only throw NullPointerException and seemingly no other exceptions. While the Java.Net.Uri implementation will throw other exceptions such as URISyntaxException and IllegalArgumentException

Otherwise they seem very similar.

The Uri you get file:/sdcard/MyFolder/MyFile.txt is valid, and when throwing it through java.net.URI I get following:

java> String uri = "file:/sdcard/MyFolder/MyFile.txt";
java> import java.net.*
java> URI urr = new URI(uri);
java.net.URI urr = file:/sdcard/MyFolder/MyFile.txt
java> urr.getScheme();
java.lang.String res2 = "file"
java> urr.getPath();
java.lang.String res3 = "/sdcard/MyFolder/MyFile.txt"

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...