2015-07-22 16 views
9

Sto cercando di ottenere un Uri da un oggetto file in questo modo:Qual'è la differenza tra Java.Net.Uri e Android.Net.Uri

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

questa restituisce i seguenti valori:

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

quindi la mia domanda è qual è la differenza tra Java.Net.Uri e Android.Net.Uri questi due valori dovrebbero essere diversi? Quando dovrebbero essere usati?

Aggiornamento

ho trovato le due pagine di documentazione e Java.Net.UriAndroid.Net.Uri ed entrambi dicono:

costruisce e analizza i riferimenti URI conformi alla RFC 2396.

Quindi sicuramente questo è un bug e dovrebbero restituire la stessa stringa?

+0

Questa domanda non è correlata a C#. Elimina il tag per favore –

+0

per Android http://developer.android.com/reference/android/net/Uri.html –

+0

simile domanda e risposta qui: http://stackoverflow.com/questions/12649530/convert -java-net-uri-to-android-net-uri – mayyo

risposta

5

La differenza è che Android.Net.Uri è propria implementazione di Google di RFC 2396.

Android.Net.Uri è immutabile, quindi è thread-safe. La loro implementazione è anche, secondo lo comments in the source, più indulgente. Quindi, mentre Java.Net.Uri lanciare un Exception si tenta di utilizzare un Uri spazzatura, l'implementazione Android ti restituirà un Uri con quella spazzatura.

Per quanto ne so, lo Android.Net.Uri getterà solo NullPointerException e apparentemente senza altre eccezioni. Mentre l'implementazione Java.Net.Uri genererà altre eccezioni come URISyntaxException e IllegalArgumentException

Altrimenti sembrano molto simili.

L'Uri si ottiene file:/sdcard/MyFolder/MyFile.txt è valido, e quando gettando attraverso java.net.URI ottengo seguente:

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"