Перетворити рядок в Урі


177

Як можна перетворити рядок у Uri на Java (Android)? тобто:

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

myUri = ???;

Відповіді:


400

Ви можете використовувати parseстатичний метод відUri

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

4
Я спробував це рішення, але у мене є проблема з ним. Спочатку Uri потрібно змінити на URI (якщо він із пакета java.net). По-друге, у нього немає конструктора "розбору". Чи маєте ви уявлення про те, що я роблю неправильно?
Юрген К.

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метод. Це так само просто, як і Урі. То яка вигода у вас від Урі?
kaba713

Це правильно. Неправильний імпорт теж є однією з моїх дратівливих проблем.
Omid.N

34

Я просто використовую java.net пакет . Тут ви можете зробити наступне:

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

URI відрізняється від Uri.
Алі Алаой

7

Якщо ви використовуєте андроїдні розширення Kotlin і Kotlin, тоді є прекрасний спосіб зробити це.

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 андроїдів і 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 дозволяє легко перетворити рядок в a 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.