2010-08-15 42 views
116

¿Cómo puedo convertir una cadena a un Uri en Java (Android)? es decir .:Convertir cadena a Uri

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

myUri = ???;

Respuesta

273

Puede utilizar el método estático de parseUri

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

He tratado de esta solución, pero tengo un problema con él. Primero Uri necesita ser cambiado a URI (si es del paquete java.net). En segundo lugar, no tiene el constructor "analizar". ¿Tienes alguna idea de lo que estoy haciendo mal? –

+1

Hay una clase 'Uri' con un método' parse' http://developer.android.com/reference/android/net/Uri.html. También hay una clase 'URI' http://developer.android.com/reference/java/net/URI.html sin un método' parse'. Entonces la clase correcta para usar es 'Uri'. Asegúrese de tener la importación correcta – ccheneson

+0

@ccheneson ¿Por qué Uri debería ser más correcto que URI? Con URI puedes usar el método 'create'.Es tan simple de usar como Uri. Entonces, ¿qué beneficio tienes de Uri? – kaba713

1

¿Qué vas a hacer con el URI?

Si va a utilizarlo con un HttpGet por ejemplo, puede usar la cadena directamente al crear la instancia de HttpGet.

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

Pero, por ejemplo, 'android.widget.ImageView.setImageURI' no lo hará, por lo que es una pregunta perfectamente válida. – Martin

+1

en realidad esto no responde la pregunta –

12

sólo estoy usando el paquete java.net. Aquí puede hacer lo siguiente:

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

puede analizar una cadena a un URI utilizando Uri.parse() como se muestra a continuación:

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

El siguiente es un ejemplo de cómo se puede utilizar su Uri recién creado en un intento implícito. Para ser visto en un navegador en el teléfono de los usuarios.

// 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: Hay una diferencia entre los androides URI y Uri.

0

El analizador de Java en java.net.URI va a fallar si el URI no está completamente codificado según sus estándares. Por ejemplo, intente analizar: http://www.google.com/search?q=cat|dog. Se lanzará una excepción para la barra vertical.

urllib hace que sea fácil convertir una cadena a java.net.URI. Preprocesará y escapará de la URL.

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

Si está utilizando Kotlin y Kotlin extensiones androide, entonces no es una hermosa manera de hacer esto.

val uri = myUriString.toUri() 

Para añadir extensiones Kotlin (KTX) a su proyecto añada lo siguiente a build.gradle de su módulo de aplicación

repositories { 
    google() 
} 

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