Convertir une chaîne en Uri


177

Comment puis-je convertir une chaîne en Uri en Java (Android)? c'est à dire:

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

myUri = ???;

Réponses:


402

Vous pouvez utiliser la parseméthode statique deUri

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

4
J'ai essayé cette solution mais j'ai un problème avec elle. Le premier Uri doit être changé en URI (s'il provient du package java.net). Deuxièmement, il n'a pas le constructeur "parse". Avez-vous une idée de ce que je fais mal?
Jürgen K.

2
Il existe une Uriclasse avec une parseméthode developer.android.com/reference/android/net/Uri.html . Il existe également une URIclasse developer.android.com/reference/java/net/URI.html sans parseméthode. La bonne classe à utiliser est donc Uri. Assurez-vous d'avoir la bonne importation
ccheneson le

1
@ccheneson Pourquoi Uri devrait-il être plus correct que URI? Avec URI, vous pouvez simplement utiliser la createméthode. C'est aussi simple à utiliser que Uri. Alors, quel avantage tirez-vous d'Uri?
kaba713

C'est vrai. Les mauvaises importations sont également l'un de mes problèmes ennuyeux.
Omid.N

34

J'utilise juste le java.net package . Ici, vous pouvez effectuer les opérations suivantes:

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

L'URI est différent de l'URI.
Ali Alaoi

7

Si vous utilisez les extensions Android Kotlin et Kotlin, il existe une belle façon de le faire.

val uri = myUriString.toUri()

Pour ajouter des extensions Kotlin ( KTX ) à votre projet, ajoutez ce qui suit au build.gradle de votre module d'application

  repositories {
    google()
}

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

3

Vous pouvez analyser une chaîne en un Uri en utilisant Uri.parse () comme indiqué ci-dessous:

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

Voici un exemple de la façon dont vous pouvez utiliser votre Uri nouvellement créé dans un intent implicite. À afficher dans un navigateur sur le téléphone des utilisateurs.

// 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: Il y a une différence entre androïdes URI et Uri .


-1

Qu'allez-vous faire avec l'URI?

Si vous allez simplement l'utiliser avec un HttpGet par exemple, vous pouvez simplement utiliser la chaîne directement lors de la création de l'instance HttpGet.

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

2
Mais par exemple, android.widget.ImageView.setImageURIce ne sera pas le cas - c'est donc une question parfaitement valable.
Martin

1
en fait cela ne répond pas à la question
Jürgen K.

-1

L'analyseur de Java java.net.URIéchouera si l'URI n'est pas entièrement codé selon ses normes. Par exemple, essayez d'analyser: http://www.google.com/search?q=cat|dog. Une exception sera lancée pour la barre verticale.

urllib facilite la conversion d'une chaîne en un fichier java.net.URI. Il prétraitera et échappera à l'URL.

assertEquals("http://www.google.com/search?q=cat%7Cdog",
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString());
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.