String in Uri konvertieren

176

Wie kann ich einen String in Java (Android) in einen Uri konvertieren? dh:

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

myUri = ???;

Techboy
quelle

Antworten:

400

Sie können die parsestatische Methode von verwendenUri

Uri myUri = Uri.parse("http://stackoverflow.com")
Ccheneson
quelle
4
Ich habe diese Lösung ausprobiert, aber ich habe ein Problem damit. Zuerst muss Uri in URI geändert werden (wenn es aus dem java.net-Paket stammt). Zweitens hat es nicht den "parse" -Konstruktor. Hast du eine Idee, was ich falsch mache?
Jürgen K.
2
Es gibt eine UriKlasse mit der parseMethode developer.android.com/reference/android/net/Uri.html . Es gibt auch eine URIKlasse developer.android.com/reference/java/net/URI.html ohne parseMethode. Die richtige Klasse ist also Uri.
Stellen
1
@ccheneson Warum sollte Uri korrekter sein als URI? Mit URI können Sie einfach die createMethode verwenden. Es ist so einfach zu bedienen wie Uri. Welchen Nutzen haben Sie von Uri?
Kaba713
Das ist richtig. Falsche Importe sind auch eines meiner nervigen Probleme.
Omid.N
34

Ich benutze nur das java.net Paket . Hier können Sie Folgendes tun:

String myUrl = "http://stackoverflow.com";
URI myURI = new URI(myUrl);
Jürgen K.
quelle
URI unterscheidet sich von Uri.
Ali Alaoi
7

Wenn Sie Kotlin und Kotlin Android-Erweiterungen verwenden, gibt es eine schöne Möglichkeit, dies zu tun.

val uri = myUriString.toUri()

Um Kotlin-Erweiterungen ( KTX ) zu Ihrem Projekt hinzuzufügen, fügen Sie dem build.gradle Ihres App-Moduls Folgendes hinzu

  repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-rc01'
}
Midhun Vijayakumar
quelle
2

Sie können einen String mit Uri.parse () wie unten gezeigt in einen Uri analysieren :

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

Das folgende Beispiel zeigt, wie Sie Ihren neu erstellten Uri implizit verwenden können. Wird in einem Browser auf dem Telefon des Benutzers angezeigt.

// 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: Es gibt einen Unterschied zwischen Androids URI und Uri .

JSON C11
quelle
-1

Was machst du mit der URI?

Wenn Sie es beispielsweise nur mit einem HttpGet verwenden möchten, können Sie die Zeichenfolge direkt beim Erstellen der HttpGet-Instanz verwenden.

HttpGet get = new HttpGet("http://stackoverflow.com");
Stuart Grimshaw
quelle
2
Aber zum Beispiel android.widget.ImageView.setImageURInicht - es ist also eine absolut gültige Frage.
Martin
1
Eigentlich beantwortet dies nicht die Frage
Jürgen K.
-1

Javas Parser-In java.net.URIschlägt fehl, wenn der URI nicht vollständig seinen Standards entspricht. Versuchen Sie beispielsweise zu analysieren : http://www.google.com/search?q=cat|dog. Für die vertikale Leiste wird eine Ausnahme ausgelöst.

urllib macht es einfach, einen String in einen zu konvertieren java.net.URI. Die URL wird vorverarbeitet und maskiert.

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