Conversão String para Uri

176

Como posso converter uma String em um Uri em Java (Android)? ou seja:

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

myUri = ???;

Techboy
fonte

Respostas:

400

Você pode usar o parsemétodo estático emUri

Uri myUri = Uri.parse("http://stackoverflow.com")
ccheneson
fonte
4
Eu tentei esta solução, mas tenho um problema com ela. Primeiro, o Uri precisa ser alterado para URI (se for do pacote java.net). Segundo, ele não possui o construtor "analisar". Você tem alguma ideia do que estou fazendo de errado?
Jürgen K.
2
Há uma Uriclasse com um parsemétodo developer.android.com/reference/android/net/Uri.html . Há também uma URIclasse developer.android.com/reference/java/net/URI.html sem um parsemétodo. Portanto, a classe certa a ser usada é Uri. Certifique-se de que você tem a importação correta
ccheneson
1
@ccheneson Por que Uri deveria estar mais correto que o URI? Com o URI, você pode apenas usar o createmétodo É tão simples de usar quanto Uri. Então, qual o benefício que você tem de Uri?
KBa713 23/03
Isso está certo. As importações erradas também são um dos meus problemas irritantes.
Omid.N 7/03
34

Estou apenas usando o java.net pacote . Aqui você pode fazer o seguinte:

String myUrl = "http://stackoverflow.com";
URI myURI = new URI(myUrl);
Jürgen K.
fonte
URI é diferente de Uri.
Ali Alaoi 08/04
7

Se você estiver usando Kotlin e Kotlin android extensões, então não é uma bela maneira de fazer isso.

val uri = myUriString.toUri()

Para adicionar extensões Kotlin ( KTX ) ao seu projeto, adicione o seguinte ao build.gradle do módulo de aplicativo

  repositories {
    google()
}

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

Você pode analisar uma String em um Uri usando Uri.parse (), como mostrado abaixo:

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

A seguir, é apresentado um exemplo de como você pode usar seu Uri recém-criado em uma intenção implícita. Para ser visualizado em um navegador no telefone do usuário.

// 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: Há uma diferença entre o Android URI e o Uri .

JSON C11
fonte
-1

O que você vai fazer com o URI?

Se você quiser usá-lo com um HttpGet, por exemplo, poderá usar a string diretamente ao criar a instância HttpGet.

HttpGet get = new HttpGet("http://stackoverflow.com");
Stuart Grimshaw
fonte
2
Mas, por exemplo android.widget.ImageView.setImageURI, não - portanto, é uma pergunta perfeitamente válida.
Martin
1
na verdade, isso não responder à pergunta
Jürgen K.
-1

O analisador de Java java.net.URIfalhará se o URI não estiver totalmente codificado para seus padrões. Por exemplo, tentar analisar: http://www.google.com/search?q=cat|dog. Uma exceção será lançada para a barra vertical.

O urllib facilita a conversão de uma string em a java.net.URI. Ele pré-processará e escapará da URL.

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