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 = ???;

Techboy
fuente

Respuestas:

400

Puede usar el parsemétodo estático deUri

Uri myUri = Uri.parse("http://stackoverflow.com")
ccheneson
fuente
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);
Jürgen K.
fuente
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'
}
Midhun Vijayakumar
fuente
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 .

JSON C11
fuente
-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");
Stuart Grimshaw
fuente
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());
EricE
fuente