2010-08-15 2 views
116

Come posso convertire una stringa in un Uri in Java (Android)? cioè .:Converti stringa in Uri

String myUrl = "http://stackoverflow.com"; 

myUri = ???;

risposta

273

È possibile utilizzare il metodo statico parse da Uri

Uri myUri = Uri.parse("http://stackoverflow.com") 
+3

ho provato questa soluzione, ma ho un problema con esso. Il primo Uri deve essere cambiato in URI (se proviene dal pacchetto java.net). In secondo luogo non ha il costruttore "parse". Hai idea di cosa sto sbagliando? –

+1

Esiste una classe 'Uri' con un metodo' parse' http://developer.android.com/reference/android/net/Uri.html. Esiste anche una classe 'URI' http://developer.android.com/reference/java/net/URI.html senza un metodo' parse'. Quindi la classe giusta da usare è 'Uri'. Assicurati di avere l'importazione corretta – ccheneson

+0

@ccheneson Perché Uri dovrebbe essere più corretto dell'URI? Con l'URI puoi semplicemente usare il metodo 'create'.È semplice da usare come Uri. Quindi quale beneficio hai da Uri? – kaba713

1

Che cosa hai intenzione di fare con l'URI?

Se lo utilizzi solo con un HttpGet, ad esempio, puoi semplicemente utilizzare la stringa direttamente durante la creazione dell'istanza HttpGet.

HttpGet get = new HttpGet("http://stackoverflow.com"); 
+2

Ma per esempio 'android.widget.ImageView.setImageURI' non lo farà - quindi è una domanda perfettamente valida. – Martin

+1

in realtà questo non risponde alla domanda –

12

sto solo usando il pacchetto java.net. Qui potete effettuare le seguenti operazioni:

String myUrl = "http://stackoverflow.com"; 
URI myURI = new URI(myUrl); 
0

è possibile analizzare una stringa in un URI utilizzando Uri.parse() come illustrato di seguito:

Uri myUri = Uri.parse("http://stackoverflow.com"); 

Quello che segue è un esempio di come è possibile utilizzare il Uri appena creato in un intento implicito. Per essere visualizzato in un browser sul telefono degli utenti.

// Creates a new Implicit Intent, passing in our Uri as the second paramater. 
Intent webIntent = new Intent(Intent.ACTION_VIEW, myUri); 

// Checks to see if there is an Activity capable of handling the intent 
if (webIntent.resolveActivity(getPackageManager()) != null){ 
    startActivity(webIntent); 
} 

NB: C'è una differenza tra l'Androids URI e Uri.

0

Il parser Java in java.net.URI fallirà se l'URI non è completamente codificato ai suoi standard. Ad esempio, prova ad analizzare: http://www.google.com/search?q=cat|dog. Un'eccezione verrà lanciata per la barra verticale.

urllib semplifica la conversione di una stringa in java.net.URI. Pre-processerà e sfuggirà all'URL.

assertEquals("http://www.google.com/search?q=cat%7Cdog", 
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString()); 
1

Se si utilizza Kotlin e Kotlin estensioni Android, poi c'è un bel modo di fare questo.

val uri = myUriString.toUri() 

Per aggiungere estensioni Kotlin (KTX) al progetto aggiungere quanto segue al build.gradle del modulo app

repositories { 
    google() 
} 

dependencies { 
    implementation 'androidx.core:core-ktx:0.1' 
}