¿Cuál es la diferencia entre Java.Net.Uri y Android.Net.Uri?

2 minutos de lectura

Avatar de usuario de User1
Usuario1

estoy tratando de conseguir un Uri a partir de una file objeto así:

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

esto devuelve los siguientes valores:

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

así que mi pregunta es cuál es la diferencia entre el Java.Net.Uri y Android.Net.Uri ¿Se supone que estos dos valores son diferentes? ¿Cuándo se deben usar?

Actualizar

Encontré las dos páginas de documentación. Java.Net.Uri y Android.Net.Uri y ambos dicen:

Construye y analiza referencias de URI que se ajustan a RFC 2396.

Por lo tanto, seguramente se trata de un error y deberían devolver la misma cadena.

  • para Android desarrollador.android.com/reference/android/net/Uri.html

    – IntelliJ Amiya

    22 de julio de 2015 a las 10:47

  • pregunta y respuesta similar aquí: stackoverflow.com/questions/12649530/…

    – mayyo

    22 de julio de 2015 a las 10:48

  • @mayyo No veo cómo se relaciona esa pregunta. Habla sobre la conversión entre los dos, no cuál es la diferencia / Cuándo deben usarse

    – Usuario1

    22 de julio de 2015 a las 10:50

Avatar de usuario de Cheesebaron
barón de queso

la diferencia es que Android.Net.Uri es la propia implementación de Google de RFC 2396.

Android.Net.Uri es inmutable, por lo tanto, es seguro para subprocesos. Su implementación es también, según el comentarios en la fuente, más indulgente. así que mientras Java.Net.Uri lanzaría un Exception intenta usar un Uri basura, la implementación de Android solo le devolverá un Uri con esa basura.

Por lo que yo puedo decir, Android.Net.Uri solo lanzará NullPointerException y aparentemente ninguna otra excepción. Mientras que la Java.Net.Uri la implementación lanzará otras excepciones como URISyntaxException y IllegalArgumentException

Por lo demás, parecen muy similares.

El Uri que obtienes file:/sdcard/MyFolder/MyFile.txt es válido, y al pasarlo java.net.URI me sale lo siguiente:

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"

Aquí hay una diferencia práctica:

java.net.uri admite direcciones IPv4 e IPv6, mientras que android.net.uri solo admite IPv4.

¿Ha sido útil esta solución?