Конвертировать строку в Uri


178

Как я могу преобразовать строку в Uri в Java (Android)? то есть:

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

myUri = ???;

Ответы:


403

Вы можете использовать parseстатический метод изUri

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

4
Я пробовал это решение, но у меня есть проблема с ним. Сначала нужно изменить Uri на URI (если он из пакета java.net). Во-вторых, у него нет конструктора "parse". Ты хоть представляешь, что я делаю не так?
Юрген К.

2
Есть Uriкласс с parseметодом developer.android.com/reference/android/net/Uri.html . Существует также URIкласс developer.android.com/reference/java/net/URI.html без parseметода. Таким образом, правильный класс для использования Uri. Убедитесь, что у вас есть правильный импорт
ccheneson

1
@ccheneson Почему Uri должен быть более правильным, чем URI? С URI вы можете просто использовать createметод. Это так же просто, как использовать Uri. Так какая вы польза от Ури?
kaba713

Это верно. Неправильный импорт - одна из моих досадных проблем.
Omid.N

35

Я просто использую java.net пакет . Здесь вы можете сделать следующее:

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

URI отличается от Uri.
Али Алаои

8

Если вы используете расширения Kotlin и Kotlin для Android, то есть прекрасный способ сделать это.

val uri = myUriString.toUri()

Чтобы добавить расширения Kotlin ( KTX ) в свой проект, добавьте следующее в build.gradle модуля приложения.

  repositories {
    google()
}

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

3

Вы можете проанализировать строку в Uri с помощью Uri.parse (), как показано ниже:

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

Ниже приведен пример того, как вы можете использовать вновь созданный Uri в неявном намерении. Для просмотра в браузере на телефоне пользователя.

// 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. Существует различие между URI Android и Uri .


-1

Что вы собираетесь делать с URI?

Если вы просто собираетесь использовать его с HttpGet, например, вы можете просто использовать строку непосредственно при создании экземпляра HttpGet.

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

2
Но, например android.widget.ImageView.setImageURI, не будет - так что это совершенно правильный вопрос.
Мартин

1
на самом деле это не отвечает на вопрос
Юрген К.

-1

Синтаксический анализатор Java java.net.URIможет потерпеть неудачу, если URI не полностью закодирован в соответствии со своими стандартами. Например, попробуйте разобрать:http://www.google.com/search?q=cat|dog . Исключение будет брошено для вертикальной черты.

urllib позволяет легко преобразовать строку в java.net.URI. Он будет предварительно обрабатывать и избегать URL.

assertEquals("http://www.google.com/search?q=cat%7Cdog",
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString());
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.