contacto[arroba]digitallearning.es

Proyecto tratamiento XML en Android utilizando DOM (I)

Post Series: Tratamiento de XML con SAX y DOM

Siguiendo con el tratamiento de ficheros XML en Android, vamos a desarrollar una Aplicación que nos servirá como ejemplo práctico de gestión y ‘parseo’ de un documento XML utilizando el método DOM.

Al proyecto Android lo denominaremos “ParsearXML” y nos permitirá crear un sistema de ficheros XML que contienen los registros de clientes de una empresa, pudiendo realizar diferentes operaciones sobre ellos.

Visión general de la App Android “ParsearXML”

Aunque podrás ver esta Aplicación en funcionamiento en un próximo video de esta serie, mostramos aquí las dos pantallas que la componen, además de la splash de inicio. Como es habitual, el diseño es esquemático ya que nos centramos en la funcionalidad que tiene la App con las diferentes opciones para crear o cargar un XML:
Pantalla App Android: crear XML
Pantalla carga y parseo XML App Android

Elementos del Proyecto Android

Comenzaremos  enumerando los elementos necesarios para el desarrollo de este proyecto denominado “ParsearXML”:

  • Clase SplashScreen, que hereda de la clase base Activity, encargada de lanzar una pantalla de presentación al iniciar la aplicación, proporcionando una mayor inmersión del usuario en la aplicación.
  • Clase MainActivity, que hereda de la clase base Activity, y que permitirá introducir la información del cliente en un nodo del documento XML.
  • Clase TareasXML, que herede de la clase base ListActivity, encargada de mostrar el contenido del documento almacenado en memoria interna del dispositivo, seleccionado por el usuario.
  • Clase Adaptador, que hereda de la clase base BaseAdapter, encargado de construir la vista de cada uno de los ítem que se mostrará en el componente ListView.
  • Clase Cliente, que definirá el constructor con los argumentos para la creación de un nuevo objeto Cliente, además de los métodos de acceso getter y setter para las propiedades privadas.
  • Clase ParsearDOM, cuya tarea principal será la de parsear el documento XML, para a continuación construir en memoria un nuevo documento con toda la información.
  • Clase TareaAsincronaListado, que hereda de la clase AsyncTask, y que permitirá cargar en segundo plano toda la información del documento XML en memoria, para posteriormente mostrarla por pantalla.
  • Layout activity_splash_screen.xml, formado por una componente de tipo ImageView, que mostrará el logotipo de la aplicación.
  • Layout activity_main.xml, formado por cuatro controles de tipo EditText que permitirán al usuario introducir los datos del cliente, y tres controles de tipo Button, encargados de omitir, eliminar o crear una nueva ficha de cliente.
  • Layout activity_tareasxml.xml, formado por un control ListView, que mostrará el contenido del archivo XML seleccionado por el usuario, un control Spinner con los documentos almacenados en la memoria interna del dispositivo , y tres controles de tipo Button para cargar el XML seleccionado, filtrar el resultado que se muestra por el valor introducido en el control EditText, y actualizar la información en pantalla.
  • Layout item.xml, que definirá la vista personalizada de cada ítem que construya el control ListView.

Estructura del proyecto

Puedes ver la estructura del proyecto en la siguiente imagen:

Estructura Proyecto App Android XML

Documentación código fuente

Detallamos las diferentes clases y métodos que definimos en el proyecto, así como los ficheros de layout y controles que implementan. Hemos dividido la publicación del proyecto en dos partes. En esta primera veremos en detalle las clases:

  • MainActivity.ja
  • TareasXML.java

y en la siguiente publicación, completaremos con el resto de clases y ficheros de layout. Allí también podrás descargar (usuarios Premium) todo el código del proyecto.

ParsearXML\app\src\main\java\com\academiaandroid\parsearxml\MainActivity.java

Se define la clase MainActivity, que hereda de la clase base Activity, y que permite crear un archivo XML con una estructura de etiquetas concreta, y añadir el contenido introducido por el usuario:

Posteriormente, dentro del método onCreate(), se define toda la lógica de eventos de usuario, desde la que se podrá crear una nueva ficha de cliente, a omitir cualquier operación y pasar a la siguiente Activity. Además se referencian los diferentes tipos de variables (EditText, TextView y Button) con sus controles a nivel de layout:

Como parte fundamental de esta clase, nos encontramos con el método crearXML(), que recibirá como argumentos de entradas los datos introducidos por el usuario por pantalla (además de la fecha de creación del documento), y que construye la lógica de nodos del documento XML:

Ya comentamos en la publicación anterior que otra forma muy válida para el parseo de un documento XML es el método XmlPull, de grandes similitudes al método StAX (Streaming API for XML), y por extensión al modelo SAX, ya que realiza una lectura secuencial a partir de los eventos y acciones definidas. En este método crearXML()  hacemos uso de la interfaz XmlSerializer del paquete org.xmlpull.v1 para la creación de un documento XML (documentación de las diferentes interfaces y métodos que implementa esta API).

Se declara una instancia XmlSerializer, que permitirá serializar la información del documento XML:
Se escribe la declaración <?xml version=’1.0′ con codificación utf-8:
Se establecen las etiquetas de inicio del nodo raíz y del nodo hijo Cliente:
A continuación, se establecen las etiquetas de inicio y fin de los nodos finales, además del texto:
Se definen las etiquetas finales del nodo hijo Cliente y del nodo raíz:
Se indica el final del documento y cierre del buffer de escritura:

ParsearXML\app\src\main\java\com\academiaandroid\parsearxml\TareasXML.java

Se define una nueva clase llamada TareasXML, que hereda de la clase base ListActivity, encargada de mostrar los documentos XML creados y leer/filtrar el documento seleccionado en un control ListView:

Dentro del método onCreate(), se asocian las variables de tipo EditText, ListView, Spinner y Button con sus recursos a nivel de layout. Además se define la lógica de selección de un documento XML para ser leído y mostrado a través del control ListView:

Se comprueba que el método listarDoc() no devuelva null para llenar el control Spinner:

El método buscarEnDocumento() posibilita filtrar el resultado del contenido del documento seleccionado por el usuario. Esta característica es de gran utilidad para documentos extensos:

Se obtiene los elementos por Cliente:

Se inicializa una variable de tipo List que almacenará objetos de tipo Cliente:

Se comprueba por cada iteración si el valor de búsqueda introducido por el usuario coincide con cualquiera de los campos de la ficha del cliente:

En la siguiente publicación veremos las clases:

  • TareaAsincronaListado.java
  • ParsearDOM.java

y los diferentes ficheros de layout:

  • activity_main.xml
  • activity_tareasxml.xml
  • item.xml

 


 

This Post Has One Comment

Comments are closed.