Utilizar el constructor URI en Android o crear URL con variables
Estoy desarrollando una aplicación de Android. Necesito crear un URI para mi aplicación para realizar una solicitud de API. A menos que haya otra manera de poner una variable en un URI, esta es la forma más fácil que he encontrado. He encontrado que usted necesita utilizar 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 de ruta (s) es ttarrivals.aspx
, y la cadena de consulta es key=[redacted]&mapid=value
.
- ¿Hay lejos para conseguir uri del mapa de bits con hacia fuera excepto él a sdcard?
- Android Wear elimina datos de DataApi con deleteDataItems
- Android Cómo obtener información de ID de una sola canción desde un URI conocido
- EditText afterTextChanged no funciona
- Android.net.uri getQueryParameterNames () alternativa
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 hacer URI.add
, pero ¿cómo puedo integrarlo en el Uri.Builder
? ¿Debo agregar todo como URI.add(scheme)
, URI.add(authority)
y así sucesivamente? ¿O es que no es la manera de hacerlo? Además, ¿hay alguna otra manera más fácil de agregar una variable a un URI / URL?
- Cómo utilizar ExifInterface con una secuencia o un URI
- Image uri no muestra imágenes en ImageView en algún dispositivo Android
- Android GCM PushNotification - Añadir añadir archivo de sonido personalizado en la aplicación
- Una respuesta final sobre cómo obtener datos Exif de URI
- Inicio de mi aplicación mediante el URI de intención
- ¿Cómo obtengo el URI de mi base de datos SQLite en mi aplicación para Android?
- ¿Cómo puedo transformar un Bitmap en un Uri?
- Cómo obtener Bitmap de un Uri?
Digamos que quiero crear la siguiente URL:
https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name
Para construir esto con el Uri.Builder
haría lo siguiente.
Uri.Builder builder = new Uri.Builder(); builder.scheme("https") .authority("www.myawesomesite.com") .appendPath("turtles") .appendPath("types") .appendQueryParameter("type", "1") .appendQueryParameter("sort", "relevance") .fragment("section-name"); String myUrl = builder.build().toString();
Hay otra forma de usar Uri
y podemos lograr el mismo objetivo
http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
Para construir el Uri puedes usar este
final String FORECAST_BASE_URL = "http://api.example.org/data/2.5/forecast/daily?"; final String QUERY_PARAM = "q"; final String FORMAT_PARAM = "mode"; final String UNITS_PARAM = "units"; final String DAYS_PARAM = "cnt";
Puede declarar todo esto de la manera anterior o incluso dentro de Uri.parse()
y appendQueryParameter()
Uri builtUri = Uri.parse(FORECAST_BASE_URL) .buildUpon() .appendQueryParameter(QUERY_PARAM, params[0]) .appendQueryParameter(FORMAT_PARAM, "json") .appendQueryParameter(UNITS_PARAM, "metric") .appendQueryParameter(DAYS_PARAM, Integer.toString(7)) .build();
Al final
URL url = new URL(builtUri.toString());
- Fuente: Curso Android de Udacity / Aplicación Sunshine
Excelente respuesta de arriba convertido en un simple método de utilidad.
private Uri buildURI(String url, Map<String, String> params) { // build url with parameters. Uri.Builder builder = Uri.parse(url).buildUpon(); for (Map.Entry<String, String> entry : params.entrySet()) { builder.appendQueryParameter(entry.getKey(), entry.getValue()); } return builder.build(); }
Para el ejemplo de la second
Answer
Utilicé esta técnica para la misma URL
http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7
Uri.Builder builder = new Uri.Builder(); builder.scheme("https") .authority("api.openweathermap.org") .appendPath("data") .appendPath("2.5") .appendPath("forecast") .appendPath("daily") .appendQueryParameter("q", params[0]) .appendQueryParameter("mode", "json") .appendQueryParameter("units", "metric") .appendQueryParameter("cnt", "7") .appendQueryParameter("APPID", BuildConfig.OPEN_WEATHER_MAP_API_KEY);
Luego, después de terminar de construir, obtenerlo como URL
como este
URL url = new URL(builder.build().toString());
Y abrir una conexión
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
Y si el enlace es simple
como la ubicación uri, por ejemplo
geo:0,0?q=29203
Uri geoLocation = Uri.parse("geo:0,0?").buildUpon() .appendQueryParameter("q",29203).build();
El uso de appendEncodePath()
podría guardar varias líneas que appendPath()
, el siguiente fragmento de código genera esta url: http://api.openweathermap.org/data/2.5/forecast/daily?zip=94043
Uri.Builder urlBuilder = new Uri.Builder(); urlBuilder.scheme("http"); urlBuilder.authority("api.openweathermap.org"); urlBuilder.appendEncodedPath("data/2.5/forecast/daily"); urlBuilder.appendQueryParameter("zip", "94043,us"); URL url = new URL(urlBuilder.build().toString());