Estou desenvolvendo um aplicativo para Android. Preciso criar um URI para meu aplicativo para fazer uma solicitação de API. A menos que haja outra maneira de colocar uma variável em um URI, essa é a maneira mais fácil que eu encontrei. Descobri que você precisa usar Uri.Builder
, mas não sei ao certo como. Meu URL é:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Meu esquema é http, autoridade é lapi.transitchicago.com
, caminho é /api/1.0
, segmento (s) de caminho éttarrivals.aspx
e seqüência de caracteres de consulta é key=[redacted]&mapid=value
.
Meu código está abaixo:
Intent intent = getIntent();
String value = intent.getExtras().getString("value");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
.authority("www.lapi.transitchicago.com")
.appendPath("api")
.appendPath("1.0")
.appendPath("ttarrivals.aspx")
.appendQueryParameter("key", "[redacted]")
.appendQueryParameter("mapid", value);
Entendo que posso fazer URI.add
, mas como faço para integrá-lo ao Uri.Builder
? Devo acrescentar tudo como URI.add(scheme)
, URI.add(authority)
e assim por diante? Ou não é assim que se faz? Além disso, existe outra maneira mais fácil de adicionar uma variável a um URI / URL?
fonte
appendPath()
para o método Se for uma string de consulta (após o?), UseappendQueryParameter()
. Veja o URL que tenho no exemplo e o que estou fazendo com cada segmento. Também adicioneitoString()
àbuild()
chamada para recuperar o tipo adequado.Existe outra maneira de usar
Uri
e podemos alcançar o mesmo objetivoPara construir o Uri, você pode usar isso:
Você pode declarar tudo isso da maneira acima ou mesmo dentro
Uri.parse()
eappendQueryParameter()
Finalmente
fonte
Excelente resposta acima se transformou em um método utilitário simples.
fonte
Aqui está uma boa maneira de explicar:
existem duas formas do URI
1 - Construtor (pronto para ser modificado , não pronto para ser usado )
2 - Construído ( não está pronto para ser modificado , pronto para ser usado )
Você pode criar um construtor
isso retornará um construtor pronto para ser modificado assim: -
mas para usá-lo você precisa construí-lo primeiro
ou no entanto você vai usá-lo. e então você criou o que já foi criado para você, pronto para usar, mas não pode ser modificado.
está pronto para uso, mas se você quiser modificá-lo, precisará buildUpon ()
Agora, toda vez que você quiser modificá-lo, precisará buildUpon () e, no final, build () .
assim Uri.Builder é um construtor de tipo que armazenar um Builder nele. Uri é um tipo construído que armazena um URI já construído nele.
novo Uri.Builder (); retorna um construtor . Uri.parse ("seu URI vai aqui") retorna um Built .
e com build () você pode alterá-lo de Builder para Built . construir sobre() você pode alterá-lo de Built para Builder . Aqui está o que você pode fazer
e também o oposto: -
espero que minha resposta tenha ajudado :) <3
fonte
para o exemplo no
second
Answer
eu usei essa técnica para a mesma URLhttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
depois de terminar de construí-lo, obtenha-o
URL
assime abrir uma conexão
e se o link for
simple
como uri de localização, por exemplogeo:0,0?q=29203
fonte
URL url = new URL(builder.build().toString());
tem a envolto por um bloco de captura tentativa para MalformedURLExceptionUsando
appendEncodePath()
você pode economizar várias linhasappendPath()
, o seguinte snippet de código cria esse URL:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
fonte
Melhor resposta: https://stackoverflow.com/a/19168199/413127
Exemplo para
Agora com Kotlin
fonte
Você pode fazer isso com expressões lambda;
e você pode criar parâmetros como esse;
Btw. Se você enfrentar qualquer problema como
“lambda expressions not supported at this language level”
, verifique este URL;https://stackoverflow.com/a/22704620/2057154
fonte