Convertir cadena a Uri


177

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

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

myUri = ???;

Respuestas:


400

Puede usar el parsemétodo estático deUri

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

44
He probado esta solución pero tengo un problema. Primero, Uri debe cambiarse a URI (si es del paquete java.net). Segundo, no tiene el constructor "parse". ¿Tienes alguna idea de lo que estoy haciendo mal?
— Jürgen K.

2
Hay una Uriclase con un parsemétodo developer.android.com/reference/android/net/Uri.html . También hay una URIclase developer.android.com/reference/java/net/URI.html sin un parsemétodo. Entonces, la clase correcta para usar es Uri. Asegúrate de tener la importación correcta
— ccheneson

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

Eso es correcto. Las importaciones incorrectas son uno de mis problemas molestos también.
— Omid.N

34

Solo estoy usando el java.net paquete . Aquí puedes hacer lo siguiente:

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

URI es diferente de Uri.
— Ali Alaoi

7

Si está utilizando las extensiones de Android Kotlin y Kotlin, entonces hay una hermosa manera de hacerlo.

val uri = myUriString.toUri()

Para agregar extensiones de Kotlin ( KTX ) a su proyecto, agregue lo siguiente al build.gradle de su módulo de aplicación

  repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-rc01'
}

3

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 puede usar su Uri recién creado en una intención implícita. Para ser visto en un navegador en el teléfono del usuario.

// 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 .


-1

¿Qué vas a hacer con el URI?

Si solo va a usarlo 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
— Jürgen K.

-1

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

urllib facilita la conversión de una cadena a 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());
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.