¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Desarrolle una aplicación Android
  3. Redes e Internet
Extrait - Desarrolle una aplicación Android Programación en Java con Android Studio
Extractos del libro
Desarrolle una aplicación Android Programación en Java con Android Studio
1 opinión
Volver a la página de compra del libro

Redes e Internet

Presentación de Volley

En mayo de 2013, Google presentó la biblioteca Volley para simplificar los desarrollos que utilizaban las comunicaciones de red. Esta biblioteca, que sustituye al cliente HTTP Apache incluido en la plataforma, simplifica enormemente el desarrollo de las comunicaciones de red para las aplicaciones:

  • Volley gestiona de manera nativa las peticiones asíncronas, evitando al desarrollador tener que implementar todo el mecanismo asíncrono de consulta y de lectura.

  • La biblioteca integra una pila para las llamadas de red y asegura su gestión.

  • Integra, a su vez, un mecanismo de caché de datos, caché que puede estar directamente en memoria o que utiliza el soporte de almacenamiento.

Por otro lado, Volley soporta de manera nativa varios tipos de respuesta: cadena de caracteres, imágenes y flujos JSON.

1. La aplicación LocDVD

El objetivo de este capítulo es agregar a la aplicación una función de búsqueda de películas a partir de un título. Para ello, la aplicación utiliza la base de datos de películas gratuita The Movie Database. En la siguiente dirección se hace una presentación: https://www.themoviedb.org/.

Esta base de datos expone un servicio web que puede consultarse muy fácilmente. Los resultados se proveen en formato XML o JSON, formato que se usará aquí.

Para utilizar la API, es preciso registrarse...

Consultar un servicio web

La aplicación LocDVD debe, ahora, permitir al usuario realizar una consulta sobre la base de datos OMDb de películas. Para ello, hay que agregar una opción en el menú del panel de navegación, y crear un nuevo fragmento que va a permitir introducir la búsqueda y mostrar los resultados. También hay que tener en cuenta que la aplicación debe conectarse a Internet. 

1. Preparación

 Edite el archivo strings.xml, que se encuentra en la carpeta /res/values

 Agregue un elemento a la lista string-array definida en el capítulo Navegación y ventanas emergentes. Llame a este elemento «Buscar».


<string-array name="drawer_Items">  
    <item>Inicio</item>  
    <item>Nuevo DVD</item>  
    <item>Buscar</item>  
</string-array>
 

Haciendo esto, aparece una entrada suplementaria en el panel de navegación.

 Ahora hay que definir el archivo de layout del nuevo fragmento. En el explorador del proyecto, agregue un archivo de layout: sitúese en la carpeta /res/layout, haga clic con el botón derecho y seleccione la opción New y, a continuación, Layout resource file. Llame a este archivo fragment_search.xml, e indique que el elemento raíz es un LinearLayout.

 En primer lugar, hay que integrar el formulario de búsqueda: este se compone de un campo que permite introducir texto y de un botón situado debajo. El identificador del campo de introducción de texto es, por ejemplo, search_queryText, y el del botón search_queryLaunch. El código correspondiente al layout es, de momento, el siguiente:


<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"   
android:layout_width="match_parent"  
    android:layout_height="match_parent">  
    <EditText  
        android:id="@+id/search_queryText"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  ...

Trabajar con el formato JSON

El objeto de tipo Response.Listener<JSONObject> debe procesar la respuesta del servidor a la consulta realizada. Los resultados de la búsqueda se presentan, habitualmente, en forma de lista. De modo que hay que leer e interpretar la respuesta en formato JSON, almacenar los datos de la película en una clase específica y, por último, definir todos los elementos necesarios para utilizar un componente ListView, como vimos en el capítulo Controles avanzados.

1. Interpretación del formato JSON

El objeto JSON devuelto por el servicio web contiene un conjunto de propiedades, en particular el conjunto de películas que satisfacen la consulta, lo que nos interesa principalmente aquí. Esta propiedad, results, incluye un array de objetos JSON que contienen los datos de cada película.

La primera etapa en la interpretación de la respuesta consiste en recorrer los datos para extraer cada película.

La clase JSONObject expone un conjunto de métodos que permiten extraer datos tipados. Las propiedades de un objeto JSON se almacenan con el formato (nombre, valor), cada uno de estos métodos recibe como parámetro el nombre de la propiedad que se ha de extraer. Estos métodos son susceptibles de producir una excepción, de modo que deben encapsularse en una etiqueta try/catch.

Para extraer un array de objetos JSON, hay que invocar el método getJSONArray del objeto JSONObject.


public void onResponse(JSONObject response) {  
    try {  
        JSONArray jsonArray = response.getJSONArray("Search");  
    } catch (JSONException e) {  
        Log.e("JSON",e.getLocalizedMessage());  
    }  
}
 

A continuación hay que recorrer cada elemento del array recuperado con ayuda de un bucle for.


for (int i =0;i<jsonArray.length();i++) {  
}
 

Cada objeto JSON del array se obtiene invocando el método getJSONObject del objeto JSONArray.


JSONObject jsonObject =jsonArray.getJSONObject(i);
 

Cada elemento del array contiene información relativa a la película, que hay que extraer. Los datos se proporcionan todos en formato String, de modo que su extracción es muy sencilla:


for (int i =0;i<jsonArray.length();i++) {   ...

Integrar un navegador

Si bien el servicio web utilizado por la aplicación LocDVD devuelve los datos en formato JSON, sería posible consultar un servicio web que devuelva directamente la información en formato HTML.

La plataforma Android proporciona varias soluciones para presentar al usuario datos en formato HTML.

La primera solución consiste en utilizar un componente TextView, cuando los datos que se han de mostrar están parcialmente formateados en HTML. El componente TextView es capaz, efectivamente, de interpretar algunas etiquetas HTML, tales como las etiquetas básicas de formato de texto -texto en cursiva, en negrita, subrayado, color del texto y del fondo-, así como las etiquetas de representación en la página -salto de línea, principalmente-.

Un componente TextView no interpreta directamente el código HTML. En su lugar, hay que transformar de forma explícita el texto HTML en un objeto de tipo Spanned mediante el método estático Html.fromHtml:


static Spanned      fromHtml(String fuente)
 

El texto transformado se asigna, a continuación, al componente TextView invocando el método setText.

Por ejemplo, las instrucciones que permiten asignar el texto «Hola a todos» (el término «todos» está en negrita, el resto del texto está en tipografía estándar) a un componente TextView son las siguientes:...