Estoy desarrollando una aplicación para Android. Necesito crear un URI para que mi aplicación realice una solicitud de API. A menos que haya otra forma de poner una variable en un URI, esta es la forma más fácil que he encontrado. Descubrí que necesita usar Uri.Builder
, pero no estoy muy seguro de cómo hacerlo. Mi url es:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value
Mi esquema es http, la autoridad es lapi.transitchicago.com
, la ruta es /api/1.0
, el segmento (s) de ruta es ttarrivals.aspx
y la cadena de consulta es key=[redacted]&mapid=value
.
Mi código está abajo:
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);
Entiendo que puedo hacerlo URI.add
, pero ¿cómo lo integro en el Uri.Builder
? ¿Debo agregar todo como URI.add(scheme)
, URI.add(authority)
y así sucesivamente? ¿O esa no es la forma de hacerlo? Además, ¿hay alguna otra manera más fácil de agregar una variable a un URI / URL?
fuente
appendPath()
para el método. Si se trata de una cadena de consulta (que viene después de?), UtiliceappendQueryParameter()
. Eche un vistazo a la URL que tengo en el ejemplo y lo que estoy haciendo con cada segmento. También agreguétoString()
a labuild()
llamada para recuperar el tipo adecuado.Hay otra forma de usar
Uri
y podemos lograr el mismo objetivoPara construir el Uri puedes usar esto:
Puede declarar todo esto de la manera anterior o incluso dentro del
Uri.parse()
yappendQueryParameter()
Al final
fuente
Excelente respuesta de arriba se convirtió en un método de utilidad simple.
fuente
Aquí hay una buena manera de explicarlo:
hay dos formas de URI
1 - Generador (listo para ser modificado , no listo para ser usado )
2 - Construido ( no listo para ser modificado , listo para ser usado )
Puedes crear un constructor por
esto devolverá un generador listo para ser modificado de esta manera:
pero para usarlo primero debes construirlo
o como lo vayas a usar. y luego ha creado lo que ya está hecho para usted, listo para usar pero no se puede modificar.
esto está listo para usar, pero si desea modificarlo, necesita buildUpon ()
ahora cada vez que quiera modificarlo necesita buildUpon () y al final build () .
por lo Uri.Builder es un constructor de tipo que almacenan un Constructor en ella. Uri es un tipo Construido que almacena un URI ya construido en él.
nuevo Uri.Builder (); vuelve a crear un constructor . Uri.parse ("su URI va aquí") devuelve un Construido .
y con build () puedes cambiarlo de Builder a Built . buildUpon () puede cambiarlo de Construido a Constructor . Esto es lo que puedes hacer.
y también lo contrario: -
espero que mi respuesta haya ayudado :) <3
fuente
para el ejemplo en el
second
Answer
utilicé esta técnica para la misma URLhttp://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
luego, después de terminar de construirlo, consíguelo
URL
asíy abrir una conexión
y si el enlace es
simple
como la ubicación uri, por ejemplogeo:0,0?q=29203
fuente
URL url = new URL(builder.build().toString());
tiene que ser envuelto por un bloque de prueba para MalformedURLExceptionEl uso
appendEncodePath()
podría ahorrarle varias líneas queappendPath()
, el siguiente fragmento de código acumula esta url:http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
fuente
La mejor respuesta: https://stackoverflow.com/a/19168199/413127
Ejemplo para
Ahora con Kotlin
fuente
Puedes hacerlo con expresiones lambda;
y puedes crear parámetros como ese;
Por cierto. Si tiene algún problema
“lambda expressions not supported at this language level”
, consulte esta URL;https://stackoverflow.com/a/22704620/2057154
fuente