Konwertuj String na Uri

177

Jak przekonwertować ciąg znaków na Uri w Javie (Android)? to znaczy:

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

myUri = ???;

Techboy
źródło

Odpowiedzi:

400

Możesz użyć parsemetody statycznej zUri

Uri myUri = Uri.parse("http://stackoverflow.com")
ccheneson
źródło
4
Wypróbowałem to rozwiązanie, ale mam z nim problem. Pierwszy Uri należy zmienić na URI (jeśli pochodzi z pakietu java.net). Po drugie, nie ma konstruktora „parse”. Czy masz pojęcie, co robię źle?
Jürgen K.
2
Istnieje Uriklasa z parsemetodą developer.android.com/reference/android/net/Uri.html . Istnieje również URIklasa developer.android.com/reference/java/net/URI.html bez parsemetody. Więc właściwą klasą jest Uri. Upewnij się, że masz poprawny import
ccheneson
1
@ccheneson Dlaczego identyfikator Uri powinien być poprawniejszy niż identyfikator URI? Dzięki URI możesz po prostu użyć createmetody. Jest tak prosty w użyciu jak Uri. Więc jakie masz korzyści z Uri?
kaba713
Tak jest. Niewłaściwy import to także jeden z moich irytujących problemów.
Omid.N
34

Właśnie korzystam z java.net pakietu . Tutaj możesz wykonać następujące czynności:

String myUrl = "http://stackoverflow.com";
URI myURI = new URI(myUrl);
Jürgen K.
źródło
URI różni się od Uri.
Ali Alaoi
7

Jeśli używasz rozszerzeń Kotlin i Kotlin dla Androida, istnieje piękny sposób na zrobienie tego.

val uri = myUriString.toUri()

Aby dodać rozszerzenia Kotlin ( KTX ) do projektu, dodaj następujące elementy do pliku build.gradle modułu aplikacji

  repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-rc01'
}
Midhun Vijayakumar
źródło
3

Możesz przeanalizować String do Uri za pomocą Uri.parse (), jak pokazano poniżej:

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

Poniżej znajduje się przykład użycia nowo utworzonego identyfikatora Uri w niejawnej intencji. Do przeglądania w przeglądarce na telefonie użytkownika.

// 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);
}

Uwaga: istnieje różnica między identyfikatorami URI i Uri systemu Android .

JSON C11
źródło
-1

Co zamierzasz zrobić z identyfikatorem URI?

Jeśli zamierzasz używać go na przykład z HttpGet, możesz po prostu użyć ciągu bezpośrednio podczas tworzenia wystąpienia HttpGet.

HttpGet get = new HttpGet("http://stackoverflow.com");
Stuart Grimshaw
źródło
2
Ale na przykład android.widget.ImageView.setImageURInie - więc jest to całkowicie uzasadnione pytanie.
Martin
1
właściwie to nie odpowiada na pytanie
Jürgen K.
-1

Parser Javy java.net.URIzawiedzie, jeśli identyfikator URI nie zostanie w pełni zakodowany zgodnie ze swoimi standardami. Na przykład, spróbuj przeanalizować: http://www.google.com/search?q=cat|dog. Dla pionowego paska zostanie zgłoszony wyjątek.

urllib ułatwia konwersję ciągu znaków na plik java.net.URI. Będzie wstępnie przetwarzać i usuwać adres URL.

assertEquals("http://www.google.com/search?q=cat%7Cdog",
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString());
EricE
źródło