desarrollo de la aplicación android del blog ...en android, las bases de datos son sqlite....

51
Emilio Eguizábal Pérez-Aradros María Vico Pascual Martínez-Losa Facultad de Ciencias, Estudios Agroalimentarios e Informática Grado en Ingeniería Informática 2014-2015 Título Director/es Facultad Titulación Departamento TRABAJO FIN DE GRADO Curso Académico Desarrollo de la aplicación Android del blog lamaletadeunaaupair.com Autor/es

Upload: others

Post on 05-Apr-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

Emilio Eguizábal Pérez-Aradros

María Vico Pascual Martínez-Losa

Facultad de Ciencias, Estudios Agroalimentarios e Informática

Grado en Ingeniería Informática

2014-2015

Título

Director/es

Facultad

Titulación

Departamento

TRABAJO FIN DE GRADO

Curso Académico

Desarrollo de la aplicación Android del blog lamaletadeunaaupair.com

Autor/es

Page 2: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

© El autor© Universidad de La Rioja, Servicio de Publicaciones, 2015

publicaciones.unirioja.esE-mail: [email protected]

Desarrollo de la aplicación Android del blog lamaletadeunaaupair.com, trabajofin de grado

de Emilio Eguizábal Pérez-Aradros, dirigido por María Vico Pascual Martínez-Losa(publicado por la Universidad de La Rioja), se difunde bajo una Licencia

Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported. Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los

titulares del copyright.

Page 3: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

Facultad de Ciencias, Estudios Agroalimentarios e Informática

TRABAJO FIN DE GRADO

Grado en Ingeniería Informática

Desarrollo de la aplicación Android del blog

lamaletadeunaaupair.com

Alumno:

Emilio Eguizábal Pérez-Aradros

Tutores:

Maria Vico Pascual Martinez Losa

Logroño, Julio, 2015

Page 4: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo
Page 5: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

3

Resumen La imposibilidad de encontrar un buen trabajo o las ganas de mejorar el inglés hacen a

nuestros jóvenes irse de nuestro país. A veces deciden irse de aupairs, a cuidar niños a otros

países. Mi clienta decidió hacer esto durante un año entero en Estados Unidos.

Este proyecto consiste en una plataforma de gestión de contenido y un cliente Android

que muestre este contenido. El contenido de la plataforma puede ser actualizado desde el

administrador web, y estos cambios en los datos se reflejan en el cliente Android. La

comunicación entre la plataforma, el cliente Android y el servidor se realiza mediante servicios

REST.

El contenido de la aplicación está orientado a ayudar a todos los jóvenes

hispanohablantes que quieran irse de aupair a Estados Unidos. Por esto mismo, está disponible

en dos idiomas, inglés y español.

Summary The impossibility of finding a job or the will of improving their english makes our young

people to leave our country. Sometimes, they decide to be aupairs, taking care of children on

other countries. My client decided to do that over a year in the United States.

This project it’s a CMS(content management software) and an Android client that

shows this content. The content can be updated on a web administrator and this changes are

shown on the Android client. The comunication between the CMS, the Android client and the

server is made with RESTful services.

The content of the application is meant to help all the young spanish speakers whom

want to be an aupair in the United States. It is available on two different languages, english

and spanish.

Page 6: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

4

Page 7: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

5

Índice

Resumen ................................................................................................................................................ 3

Summary ............................................................................................................................................... 3

Índice ..................................................................................................................................................... 5

Introducción .......................................................................................................................................... 8

Contexto del Proyecto .............................................................................................................................. 8

Objetivo del cliente ................................................................................................................................... 8

Tecnología del Proyecto ........................................................................................................................... 9

Requisitos iniciales ................................................................................................................................... 9

Cliente Android .................................................................................................................................... 9

El servidor .......................................................................................................................................... 10

Administrador web ............................................................................................................................ 10

Estudio de tecnologías ........................................................................................................................... 11

Plan de pruebas ...................................................................................................................................... 12

Planificación ........................................................................................................................................ 13

Diagrama de Gantt ................................................................................................................................ 13

Sprints .................................................................................................................................................... 13

Desarrollo ............................................................................................................................................ 15

Sprint 1: Diseño del Servidor ................................................................................................................ 15

Planificación ........................................................................................................................................... 15

Proceso de diseño ................................................................................................................................... 15

Base de datos ..................................................................................................................................... 15

Clases ................................................................................................................................................. 17

Implementación ..................................................................................................................................... 18

Seguimiento y control ............................................................................................................................ 18

Sprint 2: Servicios del Administrador Web ........................................................................................... 19

Planificación ........................................................................................................................................... 19

Servicios.................................................................................................................................................. 19

Replanificación ....................................................................................................................................... 20

Cambios en las clases básicas y persistencia ......................................................................................... 20

Diseño de los servicios ............................................................................................................................ 20

Implementación de los Servicios ............................................................................................................ 21

Seguimiento y control ............................................................................................................................ 22

Page 8: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

6

Sprint 3: Administrador Web ............................................................................................................... 23

Planificación ........................................................................................................................................... 23

Diseño..................................................................................................................................................... 23

Diagrama de casos de uso ................................................................................................................. 23

Interfaz gráfica ................................................................................................................................... 24

Implementación de la Web .................................................................................................................... 24

Diseño de los servicios los datos de usuario ........................................................................................... 25

Seguimiento y control ............................................................................................................................ 26

Sprint 4: Finalización del Servidor ........................................................................................................ 27

Planificación ........................................................................................................................................... 27

Diseño de los servicios de actualización ................................................................................................. 27

Implementación de los servicios ............................................................................................................. 28

Reunión con el cliente y cambios ........................................................................................................... 28

Android, investigación de tecnologías ................................................................................................... 28

Seguimiento y control ............................................................................................................................ 29

Sprint 5: Diseño del cliente Android ..................................................................................................... 30

Planificación ........................................................................................................................................... 30

Diagrama de casos de uso ..................................................................................................................... 30

Diagrama de actividad del primer arranque .......................................................................................... 31

Diseño de la base de datos ..................................................................................................................... 32

Interfaz gráfica ....................................................................................................................................... 32

Diagrama de clases ................................................................................................................................ 33

Seguimiento y control ............................................................................................................................ 34

Sprint 6: Implementación del cliente Android ...................................................................................... 35

Planificación ........................................................................................................................................... 35

Base de datos y persistencia .................................................................................................................. 35

Lógica ..................................................................................................................................................... 37

Interfaz gráfica ....................................................................................................................................... 39

Seguimiento y control ............................................................................................................................ 40

Sprint 7: Finalización del proyecto ....................................................................................................... 41

Replanificación ....................................................................................................................................... 41

Layouts ................................................................................................................................................... 41

ArrayAdapter.......................................................................................................................................... 43

Control del flujo de la aplicación ............................................................................................................ 44

Page 9: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

7

Rendimiento de la aplicación ................................................................................................................. 45

Seguimiento y control ............................................................................................................................ 45

Conclusión ........................................................................................................................................... 46

Tiempos reales y planificados ................................................................................................................ 46

Satisfacción del cliente ........................................................................................................................... 46

Conclusion final ...................................................................................................................................... 47

Mejoras del proyecto ............................................................................................................................. 48

Bibliografía .......................................................................................................................................... 49

Page 10: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

8

Introducción

Contexto del Proyecto

Mi cliente es el creador y administrador del blog lamaletadeunaaupair.com. Decidió

irse de aupair a Estados Unidos y creó este blog para contar su experiencia e intentar ayudar a

otras personas que quieran irse de aupair a Estados Unidos.

Me ha solicitado la creación de una aplicación Android que le permita a los futuros

aupairs tener información en la palma de su mano, información que les haga más sencilla su

estancia y su preparación para el viaje a Estados Unidos. Este contenido será creado

específicamente para la aplicación sólo por mi cliente. Quiere poder actualizar el contenido en

todo momento y sin tener que depender de nadie.

Su intención es ofrecer esta información en sólo dos idiomas, castellano e inglés. No

tiene intención de dar soporte a otros idiomas u otros países porque sólo habla castellano e

inglés y los trámites administrativos requeridos para cada país difieren mucho de un país a

otro. Pese a que le informé de la posibilidad de utilizar un traductor, mi cliente dejó muy claro

que no quería contar con ello. Que quería hacer las traducciones a mano y centrarse sólo en

esos dos idiomas.

Objetivo del cliente

El objetivo del cliente es una aplicación Android que permita acceder al contenido

creado específicamente para la aplicación por él. Además, este contenido tiene que ser

actualizable por el cliente sin depender de nadie.

Para ello, tras un análisis inicial, mi proyecto va a constar de 3 apartados claramente

diferenciados.

La aplicación Android es básicamente una aplicación enciclopédica. Poseerá cierta

parte de interacción del usuario, no solo para moverse por la aplicación sino también para

aportar contenido.

Como mi clienta no quiere depender de nadie para administrar el contenido en su

aplicación, la opción más sencilla es que pueda subir el contenido mediante una interfaz web a

un servidor, y que el cliente Android se lo descargue.

Para poder subir el contenido creado por el administrador, se creará una web. En esta

web el administrador podrá editar y subir el contenido.

Así, el alcance inicial que planteo para el proyecto es el conjunto de estas tres partes.

Page 11: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

9

El cliente Android, que tendrá un sistema de actualizaciones.

El administrador web, que permitirá la subida y edición de contenido

El servidor, que proporcionará y gestionará los datos.

Tecnología del Proyecto

A la hora de abordar el proyecto me he planteado distintas alternativas.

Utilizar un gestor de contenido como Wordpress, era una de mis ideas iniciales. Tengo

prácticamente todo lo que necesito ahí pero es demasiado complejo para adaptarlo en

poco tiempo. Además no he encontrado buenas y gratuitas extensiones para lo que

necesito.

Otra opción que se me ocurrió fué gestionar todos los datos desde xml pero la

complejidad que podían llegar a tener y sobre todo la extensión de los ficheros me

hizo ver que era más cómodo desde una base de datos.

Finalmente, la opción que he escogido es un servidor con servicios REST que me

permita comunicarme con el cliente Android y una web de administración del

contenido. He elegido este tipo de servicios porque tengo experiencia en su uso y

creación y creo que su uso es adecuado para el tamaño del proyecto.

Para ello necesito encontrar una tecnología que me permita crear servicios REST en PHP.

Me centro en el lenguaje PHP porque es la única tecnología para la que he encontrado

servidores gratuitos para la hora del despliegue del proyecto.

Requisitos iniciales

Cliente Android Toda la aplicación estará en dos idiomas, español e inglés. La funcionalidad básica del

cliente Android será la visualización de artículos. Estos artículos estarán clasificados según

secciones y subsecciones. La clasificación, las secciones y los propios artículos son contenido

que vendrá suministrado por el cliente.

Inicialmente existen tres tipos de artículos. El primero de ellos contiene imágenes y

texto, está destinado a los artículos más complejos y con más contenido. El segundo tipo de

artículos es un tipo vocabulario que contendrá una palabra, su traducción y su significado en

inglés. Y el tercer tipo de artículos es una lista interactiva estilo “todo list”. Es la típica lista de

la compra, en la que puedes tachar lo que has hecho.

Algo muy importante es que este tercer tipo de artículos, debería sincronizarse entre

el servidor y el cliente para que en el caso de que el cliente cambiase de móvil o borrase la

Page 12: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

10

aplicación, no perdiese estos datos. Aquí es donde aparece la interactividad del usuario y el

servidor.

En cualquier parte de la aplicación debería poderse desplegar desde un lateral el menú

de favoritos, que permite acceder rápidamente a los artículos señalados. Este menú también

se sincronizará con el servidor.

Todos los datos de los artículos deberán estar disponibles offline. Se descargarán una

vez entres al artículo o, estando en una red wifi, automáticamente. Las futuras actualizaciones

se realizarán por internet.

La cuenta de usuario se definirá por el correo electrónico y la contraseña.

El servidor Es necesario un servidor desde el que descargar todas las actualizaciones que incluya

el cliente. Estas actualizaciones sólo pueden ser de contenido, ya que para introducir

funcionalidad se deberá contar con una actualización de la aplicación. Todos los datos

intercambiados entre el servidor y la aplicación o el cliente web se realizarán mediante

servicios REST.

El servidor contendrá todos los datos que se vayan a mostrar en la aplicación y

también los datos de usuario.

La distribución de los datos es igual que en la aplicación Android, se guardan las

secciones y cada tipo de artículo. El cliente detectará los artículos nuevos y el servidor se los

proporcionará para que los descargue.

El servidor tiene que guardar también los favoritos propios de cada usuario y los

artículos tipo lista de la compra que he descrito antes.

Como he explicado, el servidor tiene que suministrar datos a las aplicaciones y

mantener sincronizados los datos de usuario. También tendrá que guardar todos los datos que

el administrador de la aplicación (el cliente) quiera introducir para las actualizaciones.

Administrador web La finalidad del administrador web es que permita al administrador crear, guardar y

editar contenido.

Este administrador se basaría en una interfaz web que permita crear secciones y

artículos. Se podrán guardar borradores de todo tipo y publicarlos. Por supuesto tendrá un

sistema de carga de imágenes para poder incluirlas en los artículos.

Para acceder al sistema tendrá que autenticarse con su usuario y contraseña. Accederá

a un panel de administración que le permitirá añadir contenido. Una vez escrito, podrá

guardarlo en borradores o publicarlo. También puede ver todo el contenido.

Page 13: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

11

Estudio de tecnologías Para cada una de las partes de mi proyecto, he analizado varias tecnologías.

Cliente Android

o Entorno de desarrollo: Android Studio

Pese a que haya trabajado ya para Android en Eclipse, Android Studio

ahora es el entorno de desarrollo oficial. Toda la información que he

leído acerca de este entorno es buena. Pese a ello, si me diese algún

problema, el cambio a Eclipse debería ser trivial. El problema es que

los plugins para desarrollar para Android desde Eclipse ya no tienen

soporte oficial. En mi caso esto no debería ser un problema porque mi

equipo de desarrollo tiene una versión muy antigua de Android.

o Tecnología de persistencia: Sqlite

En Android, las bases de datos son Sqlite. Seguramente mi proyecto

necesite una base de datos en el cliente Android pero no lo tengo aún

decidido.

o Versión API Android:

Mi dispositivo de desarrollo es un Sony Xperia U y la versión de

Android que lleva es la 2.3.1 sin opción a utilizar una versión más

reciente. Por eso, no me queda otra opción que utilizar la API 10, que

es una API muy vieja pero la última compatible con mi equipo.

Servidor

o Lenguaje de desarrollo: PHP

Como ya he explicado, el lenguaje que voy a utilizar es PHP. Es versátil,

tiene muchísima documentación muy detallada y existen muchos

frameworks que permiten la creación de servicios REST.

o Entorno de desarrollo: NetBeans

Ya lo he utilizado anteriormente en el Grado, así que lo conozco

perfectamente. Además lo utilicé en la asignatura de Desarrollo de

Aplicaciones Web. También utilizaré este entorno para el

administrador web.

o Tecnología de persistencia: MySql

Con PHP se puede utilizar casi cualquier tipo de base de datos, pero

MySql históricamente ha estado muy ligado con este lenguaje.

Funcionan muy bien juntos y no tengo otra opción ya que el servidor

en el que voy a desplegar la aplicación utiliza PHP y MySql.

o REST:

Aún no tengo claro el framework sobre el que voy a diseñar los

servicios. Conozco varios que permiten este desarrollo. En su

correspondiente Sprint decidiré el que vaya a utilizar.

Administrador Web

o Entorno de desarrollo: NetBeans

o Cliente REST:

Page 14: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

12

Existen muchas posibilidades. Dependiendo de la versión de PHP del

servidor que tenga, puedo utilizar cURL, HTTP_Request o algún

framework. Lo decidiré en su Sprint.

Proyecto

o Diseños: ArgoUML y MySqlWorkbench

ArgoUML permite la creación de todo tipo de diseños. También

Poseidón era otra opción, porque ambos los he utilizado en el grado

pero este último es de pago. MySqlWorkbench lo utilizo para la BD.

o Control de versiones y copias de seguridad

Voy a utilizar Git para el control de versiones. Como mi proyecto

consta de varios entornos de desarrollo, sincronizaré los datos con una

aplicación externa a los propios entornos, SourceTree. Además, todo

mi proyecto va a estar alojado en Dropbox.

Plan de pruebas

Las pruebas que voy a ir realizando en varios sprints serán estas:

Pruebas unitarias: Para comprobar el correcto funcionamiento del código y los

métodos de la parte del servidor. Para este tipo de pruebas voy a utilizar la

herramienta PHPUnit. Este tipo de pruebas las integraré en la implementación de toda

la parte del servidor.

Pruebas de integración: Sobre todo para probar la aplicación Android. Existen

frameworks para hacerlo en Android pero son muy dependientes de la versión de la

API que esté utilizando. Estas pruebas las haré a mano.

Pruebas de aceptación: Por supuesto, mi cliente supondrá parte de las pruebas de mi

proyecto. Estas pruebas consisten en que el usuario final de la aplicación la prueba y

decide si sigue o no sus requisitos.

Page 15: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

13

Planificación Voy a seguir la metodología SCRUM. Voy a dividir el proyecto en 8 Sprints, todos de 40

horas y el último de 20.

Diagrama de Gantt

Este diagrama refleja la duración de los sprints y su planificación en el tiempo del proyecto. En

total son 300 horas de proyecto.

Sprints Sprint 0:

Este Sprint me sirve para planificar y organizar todo el proyecto. Es el Sprint que estoy

haciendo ahora. También he tenido la primera reunión con el cliente.

En cada uno de los Sprints tendré unas horas para planificarlo y para llevar un

seguimiento y control respecto a la planificación general y a la propia planificación de cada

sprint. Este documento formará parte del entregable de cada uno de los sprints. El entregable

contendrá una explicación extensa de todo lo que se ha hecho en el sprint. Estos entregables

formarán parte de la memoria.

Sprint 1:

Diseño del servidor. Me encargaré del diseño de la base de datos y de las clases

orientadas al funcionamiento interno del servidor. Los servicios los diseñaré e implementaré

específicamente en el sprint dedicado a cada parte. Implementaré la base de datos y las clases

diseñadas.

Sprint 2:

En este sprint diseño completamente los servicios que necesitará el cliente del

administrador web. Para ello decidiré qué tecnología utilizaré en los servicios. También los

implementaré.

Page 16: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

14

Sprint 3:

Diseñaré e implementaré el prototipo del administrador web y realizaré las pruebas

pertinentes para su correcto funcionamiento. Tendré también la segunda reunión con el

cliente para que pueda empezar a introducir contenido.

Sprint 4

Terminaré el servidor completamente en este sprint, con los servicios orientados al

usuario. Analizaré bien el cliente Android y elegiré las tecnologías y patrones que vaya a

utilizar. Tendré una tercera reunión con el cliente para evaluar la herramienta del

administrador y que proponga posibles cambios.

Sprint 5

Diseño completo del cliente android. Si en la reunión anterior se han producido

cambios, los realizaré conforme a lo acordado. Este diseño contendrá desde los diagramas de

clases hasta el diseño de la interfaz gráfica.

Sprint 6

Implementación del cliente android. A la hora de implementar el cliente, tendré en

cuenta el rendimiento de la aplicación y su tamaño, para intentar que funcione lo más rápido

posible y en el espacio más reducido posible.

Sprint 7

Finalización de la implementación y finalización de la memoria.

Hasta aquí son 300 horas planificadas. Como añadido al proyecto, voy a planificar 2

sprints extra por si se diese el caso de que me sobrara tiempo.

Sprint 8 extra

Mejorar el administrador web, diseñando una interfaz más amigable y usable. En el

proyecto inicial mi idea del administrador web es que sea un prototipo que visualmente sea

sencillo y que funcione bien. Ahora diseñaré e implementaré un administrador que sea más

sencillo de usar y con un aspecto más atractivo.

Sprint 9 extra

El siguiente paso sería hacer un cliente web para que cualquier usuario pueda acceder

a los datos sólo con un navegador.

Page 17: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

15

Desarrollo

Sprint 1: Diseño del Servidor Este Sprint lo dedicaré al diseño del servidor. Contendrá desde el diseño de la base de

datos inicial, únicamente teniendo en cuenta el contenido de la aplicación, hasta la lógica del

servidor. Empezaré con los servicios en el siguiente Sprint.

Planificación Servidor, diseño de base de datos 16 horas

Servidor, implementación de base de datos 4 horas

Servidor, diseño de clases básicas y persistencia 10 horas

Servidor, implementación de clases básicas y persistencia 8 horas

Documentación 2 horas

Total 40 horas

Empiezo por el servidor. Comienzo con la base de datos y a partir de ahí implemento

tanto la base de datos como todas las clases que me permitan acceder a ésta y trabajar con

ella. Estas clases son parte de la lógica de negocio y la persistencia de la aplicación. Este sprint

tiene que estar muy bien diseñado porque todo el proyecto va a depender de ello.

Proceso de diseño

Base de datos

Page 18: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

16

Este diagrama lo he creado con el software libre DIA. No lo había especificado antes

porque contaba con que ArgoUML o MySqlWorkbench podían diseñar este tipo de diagramas.

Como no es así, he tenido que buscar una herramienta que cumpliera mis necesidades.

La base de datos contiene los datos necesarios explicados en el Sprint 0. He añadido el

administrador para que se puedan cotejar los datos de usuario y contraseña y que nadie pueda

subir contenido excepto mi cliente.

Como se ve, los 2 idiomas se guardan a la vez en cada tabla en campos separados. Creo

que es la solución más cómoda ya que no deberían ser datos muy extensos y sólo vamos a

requerir uno de ellos cada vez que vayamos a mostrar cualquier artículo. Barajé otras

alternativas para la internacionalización pero mi cliente fue muy claro en este tema, y sólo va a

querer 2 idiomas. De esta manera, la alternativa más barata en recursos es ésta. Al ser un

alojamiento gratuito, el espacio es muy limitado.

Inicialmente, los datos pertenecientes a los usuarios finales de la aplicación no los voy

a tener en cuenta porque los añadiré más adelante, en su sprint correspondiente.

La relación entre las secciones implica la existencia de secciones generales y

subsecciones. Aquellas que no estén relacionadas serán secciones generales. Esto permite

crear una jerarquía dentro de las secciones.

Los artículos tendrán un campo que reflejará si están publicados o no. Este campo

servirá para gestionar los borradores y así permitir la escritura parcial de artículos por parte

del administrador.

Como se puede ver sólo se podrán escribir tres tipos de artículos. Esta herencia es

disjunta y total aunque por limitación del software del diagrama no aparezca. Si es un artículo

con texto e imágenes se utilizará el tipo HTML, si es un artículo tipo lista de la compra se

utilizará Lista y si es vocabulario se utilizará Vocabulario. Este último tipo de artículos tiene

tres campos de contenido. Estos campos se utilizarán para la palabra en castellano, su

traducción directa y su significado en inglés.

Page 19: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

17

El paso a tablas del diagrama de entidad relación, queda así.

La entidad sección está transformada como una sola tabla, pese a que la relación que

lleva esta entidad permite hacerlo de otra forma. Esto me genera nulos en el campo

seccionPadre, pero me ahorra una tabla.

La herencia se transforma en una relación entre la tabla padre(artículo) y las hijas. Al

no tener ningún atributo, las entidades lista y vocabulario no se reflejan en la base de datos.

Las entidades vocablo y elemento son las que están relacionadas con artículo al haber

desaparecido lista y vocabulario.

Pese a que esta herencia me permitiría su transformación a tablas de diferentes

maneras, he elegido ésta porque no me introduce nulos.

Clases

He decidido orientar el servidor de la siguiente manera:

Siguiendo la arquitectura de 3 capas, la voy a aplicar al servidor. Ahora solo voy a crear

el modelo y la persistencia, estas dos partes me permitirán acceder y controlar todos los datos

de la base de datos, y controlar la lógica de negocio. La tercera capa, la vista, corresponde con

el cliente Android y al Administrador web. Esa la haré más adelante.

Como se puede ver, la persistencia sólo contiene 2 clases, se encargarán de las

conexiones con la base de datos y de guardar y extraer los datos. He creado también las clases

básicas, son meros accesores de los que tirarán los servicios.Las clases básicas del servidor

permitirán el acceso a la base de datos y el control y uso de todos esos datos.

La clase DBManager será la encargada del guardado de los datos y la extracción de

ellos desde la base de datos. Se apoyará sobre la clase DBConnect para la conexión a la base de

datos.

Page 20: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

18

Implementación Para la implementación del servidor, voy a necesitar lo primero el propio servidor

físico. Cuando decidí el lenguaje a utilizar en el servidor, esto también lo tuve en cuenta puesto

que los hostings gratuitos suelen llevar PHP y MySql. Mi idea inicial era utilizar Python para la

programación dado que en las prácticas diseñé e implementé una api REST muy parecida a lo

que necesito, pero dado que no encontré una opción gratuita para un servidor con esta

tecnología, decidí hacerlo en PHP, como ya expliqué.

Por lo tanto, he reservado un servidor en Hostinger y me dispongo a la

implementación. Tener el servidor tan pronto, me permite probar todo en su entorno real y

trabajar con las versiones específicas relativas a cada tecnología que utilice.

La implementación de la base de datos es trivial. La de las clases básicas y la

persistencia es más costosa porque tengo la estructura pero no la funcionalidad.

Seguimiento y control Me dí cuenta que para terminar el Sprint necesitaba más horas así que pese a haber

planificado 40 horas, terminé el sprint en el plazo planificado invirtiendo las horas necesarias.

Planificado Real

Servidor, diseño de base de datos 16 horas 18 horas

Servidor, implementación de base de datos 4 horas 1 horas

Servidor, diseño de clases básicas y persistencia 10 horas 12 horas

Servidor, implementación de clases básicas y persistencia 8 horas 8 horas

Documentación 2 horas 6 horas

Total 40 horas 45 horas

Como se puede ver, el diseño de la base de datos me llevó más tiempo del que había

planificado así como el diseño de las clases básicas, la persistencia y la documentación. Para

los siguientes sprints lo tendré en cuenta. No se ha debido este retraso a nada en especial sino

a intentar hacer las cosas bien y de manera exhaustiva.

La documentación me ha costado el triple de lo que había planificado. Esto es muy

significativo ya que en todos los demás sprints tengo una parte de documentación así que

tengo que tenerlo muy en cuenta en mis siguientes planificaciones.

En cambio, la implementación de la base de datos ha sido muy rápida.

Page 21: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

19

Sprint 2: Servicios del Administrador

Web

Este sprint lo dedicaré a los servicios orientados al administrador. Analizaré las

tecnologías que me permiten la creación de servicios REST en PHP y elegiré la adecuada.

Diseñaré esos servicios y los implementaré.

Planificación Servidor, elección y aprendizaje de la tecnología sobre la que sustentar los servicios. 12 horas

Servidor, diseño de los servicios web 6 horas

Servidor, implementación de los servicios web 16 horas

Documentación 6 horas

Total 40 horas

Servicios Para encontrar el framework que necesito he hecho una búsqueda exhaustiva por la

red. He encontrado varios que me podrían servir sin problemas pero sólo necesito uno. He

escogido 4 que parecían apropiados por su gratuidad y su buena fama: Laravel, Slim, Epiphany

y Limonade.

Limonade queda casi descartado desde el principio porque la documentación es escasa

y está bastante desorganizada. Laravel tiene una muy buena documentación pero está

orientado a productos a gran escala. Esta sería una buena opción en caso de que el proyecto

alcanzase un tamaño considerable. Tanto Epiphany como Slim tienen muy buena pinta ya que

los dos tienen muy buena documentación y son muy sencillos de usar. Dado que he trabajado

con un framework REST en python, escojo el que más se parece, Slim.

Este framework permite crear una aplicación que gestiona casi automáticamente los

servicios y me provee de herramientas sencillas para su creación. El primer paso es aprender a

utilizar esta tecnología. Gracias a la extensa documentación existente esto no es un problema.

Ya que una API REST tiene unas propiedades específicas, el diseño de esta api va

también ligado a estas propiedades. Este diseño se basa en que dependiendo de quién realiza

la petición de datos, te proporciona éstos de una manera más simple o más compleja. Si el

administrador quiere editar un artículo, éste deberá recibir el artículo completo con los 2

idiomas. En cambio, un usuario final, sólo debería recibir un idioma, el que haya solicitado.

Page 22: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

20

Siguiendo el diseño que he realizado en el Sprint 1, me fijo en que esto no lo tengo

contemplado. Sólo he diseñado las clases básicas desde el punto de vista de la app Android,

del usuario. Tengo que diseñarlo desde el punto de vista del Administrador.

Replanificación He tardado aproximadamente 12 horas en seleccionar y estudiar la tecnología para los

servicios. Ahora tengo que replanificar, cambiar las clases básicas y la persistencia, y continuar

con el sprint.

Planificado Real

Servidor, elección y aprendizaje de la tecnología sobre la que sustentar los servicios.

12 horas 12 horas

Cambio de las clases básicas y la persistencia 8 horas -

Servidor, diseño de los servicios web 6 horas -

Servidor, implementación de los servicios web 16 horas -

Documentación 6 horas -

Total 48 horas -

Cambios en las clases básicas y persistencia Los procesos de carga y guardado de los datos tenían que contemplar el punto de vista

del administrador y del usuario, así que he tenido que crear nuevas clases que permitan el

punto de vista del administrador.

Así, he creado las clases “Completas”, que son clases hijas de

las que ya tenía creadas añadiendo los datos que me faltaban.

Por ejemplo la clase Artículo, desde el punto de vista del

usuario sólo contiene el nombre y el id, para el administrador contiene

los dos idiomas, si está o no publicado y la sección a la que pertenece.

Diseño de los servicios Una vez he terminado con las clases y la persistencia, paso a diseñar los servicios. Estos

servicios que diseño, corresponden a los que van a utilizar el cliente Android y el administrador

web. En total, los servicios van a estar divididos en 3 partes:

Servicios del administrador web: estos servicios permiten acceder y editar los datos

desde el administrador web. También serán usados por el cliente Android para acceder a los

datos.

Servicios de datos de usuario: los utilizará el cliente Android para sincronizar los datos

de los usuarios, como los favoritos.

Page 23: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

21

Servicios de actualizaciones: Estos servicios le darán al cliente Android la información

que necesite para, utilizando los demás servicios tener siempre disponible la última versión de

los datos.

Pese a que ahora parezca un poco confuso, aún no tengo decidido cómo van a

funcionar del todo los servicios de actualización. En sus respectivos sprints, los definiré más

detenidamente.

Ya que una API REST tiene unas propiedades

específicas, el diseño se basa en que dependiendo

quién realiza la petición de datos los devuelve de una

forma sencilla o compleja. Si el administrador quiere

editar un artículo, éste deberá recibir el artículo

completo con los 2 idiomas. En cambio, un usuario final,

sólo debería recibir un idioma, el que haya solicitado.

Como ya he explicado los primeros 5 métodos del

servicio dependen de quién los esté utilizando según

authenticate(). Si es el administrador recogerá los datos

“Completos” y si es un usuario final recibirá los datos

más sencillos.

Los demás métodos sólo pertenecen al administrador.

Éstos permiten la modificación e inserción de nuevos

datos.

El sistema de autenticación lo crearé en el siguiente

Sprint.

Implementación de los Servicios Al igual que con la lógica, he utilizado el IDE NetBeans. No he tenido complicaciones

más allá de lo habitual. A la hora de la implementación hay varios métodos del Sprint anterior

que tenían errores en su funcionamiento que no he detectado hasta ahora.

Para ilustrar esta implementación voy a poner un pequeño fragmento de código,

explicando la cabecera de los servicios:

Page 24: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

22

Como se ve en la imagen, en la cabecera defino la ruta del servicio y los parámetros

que voy a tener. Directamente ahí le especifico el método que va a realizar, en este caso sólo

devolver un objeto Json con los datos de un artículo.

También he tenido que arreglar unos errores que he arrastrado del sprint 1.

Seguimiento y control Habiendo terminado el sprint, al final he dedicado unas horas extra a la

implementación de los servicios para corregir algunos errores que arrastraba desde el Sprint

anterior que aún no había detectado. Esta es la tabla de tiempos final:

Planificado Real

Servidor, elección y aprendizaje de la tecnología sobre la que sustentar los servicios.

12 horas 12 horas

Rediseño e implementación de las clases básicas y persistencia

8 horas 6 horas

Servidor, diseño de los servicios web 6 horas 2 horas

Servidor, implementación de los servicios web 16 horas 17 horas

Documentación 6 horas 6 horas

Total 48 horas 43 horas

Pese a la replanificación, mi planificación inicial no iba desencaminada. La

replanificación me ha hecho meter unas horas extras, pero como lo he hecho dentro del plazo

establecido, la planificación general no se ha visto afectada.

Page 25: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

23

Sprint 3: Administrador Web

Una vez tengo los servicios básicos funcionando, paso a diseñar e implementar el

administrador web. Este administrador va a tener 2 partes muy diferenciadas, un pequeño

cliente de los servicios REST que ya tengo diseñados y la web que va a permitir interaccionar e

introducir infomación al administrador.

Planificación Cliente web, diagrama de casos de uso 2 horas

Cliente web, diseño interfaz gráfica 2 horas

Cliente web, implementación 16 horas

Servicios datos de usuario, diseño 4 horas

Servicios datos de usuario, Implementación 10 horas

Documentación 6 horas

Total 40 horas

Me encargaré del cliente web del administrador. La funcionalidad será el logueo del

usuario y la posibilidad de ver todos los datos y añadir datos nuevos. Una vez acabado este

cliente, me encargaré de finalizar los servicios que quedan propios de los usuarios finales.

Diseño

Diagrama de casos de uso

El diagrama de Casos de Uso sólo refleja lo que el administrador va a poder hacer en su

cliente web. Empezará logueándose en la plataforma y podrá elegir una categoría de las

disponibles o añadir una. Una vez haga cualquiera de las dos cosas, dependiendo de si la

Page 26: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

24

categoría tiene subcategorías o no, podrá elegir subcategoría, elegir un artículo o añadir un

artículo. Si elige un artículo podrá editarlo.

Pese a que este diagrama parezca confuso, sólo da todas las opciones que necesita el

administrador.

Interfaz gráfica

Tras el típico formulario de logueo, la interfaz gráfica general he intentado que tenga

todos los datos de un vistazo. Los botones que añaden nuevas categorías añaden un

formulario que permite crear esa categoría. Al seleccionar cada una de las categorías o

artículos recarga la página para cargar los datos .

Soy consciente que no es un buen diseño. Esta versión es un prototipo, lo que me

interesa es que funcione para que le permita a mi cliente meter datos y darme su valoración

sobre las posibilidades que tiene. Si me sobrara tiempo intentaría hacerla más usable para el

administrador.

Implementación de la Web Al igual que con la lógica, he utilizado el IDE NetBeans. No he tenido complicaciones

más allá de lo habitual. A la hora de la implementación hay varios métodos del Sprint anterior

que tenían errores en su funcionamiento que no he detectado hasta ahora.

Page 27: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

25

En la implementación he tenido varios problemas: desde problemas con la sesión

activa hasta a la hora de recoger y enviar los datos de los servicios. Para esto, he tenido que

crear un cliente específico de mis servicios utilizando HTTP_request. Había pensado utilizar

algún framework, pero utilizando PHP > 5.x, este tipo de conexiones se ha simplificado mucho

y no ha hecho falta. He solventado todos los problemas dedicando algo más de tiempo del

planificado.

Diseño de los servicios los datos de usuario El primer servicio que he diseñado es el sistema de logueo. Pese a que mi idea inicial

era utilizar algún sistema de seguridad ya extendido como Oauth 2, es demasiado complejo

para un proyecto de estas características. Por tanto he decidido crear un sistema sencillo pero

efectivo de logueo.

Utilizando el usuario y contraseña que manda el cliente, el servidor crea un hash con

esta información y el timestamp actual. Este hash es enviado al cliente y es guardado

temporalmente en la base de datos. Mientras tanto, el cliente manda ese hash en cada

petición para ser identificado. Esta autenticación caduca en 60 minutos. Por supuesto, el

usuario puede cerrar sersión en el momento que quiera.

Por supuesto, este sistema no es seguro a no ser que se utilice sobre ssl. Debido a que

el proyecto hasta ahora es didáctico, no considero necesario probarlo en un entorno real. En

un entorno real, el servidor debería soportar SSL o cambiar el sistema de autenticación.

El resto de los servicios aún no los he acabado porque el mayor problema con el que

cuento es que tengo que diseñar un sistema para mantener el cliente Android actualizado.

Los servicios por parte del cliente Android que sirven para

sincronizar los datos propios del usuario como los favoritos, etc,

ya están diseñados. Los implementaré en el siguiente Sprint.

Estos servicios me permiten recoger y guardar los datos

que el usuario puede modificar. Los tres primeros se centran en

los favoritos y los tres últimos en los artículos tipo lista. Estos servicios me permitirán

sincronizar los datos entre el servidor y el usuario.

Pero el sistema de actualizaciones aún no lo tengo del todo. Aún no tengo del todo

claro cómo lo voy a hacer y si tengo que cambiar el comportamiento que tenía pensado para el

cliente android. En el siguiente Sprint definiré todas las posibilidades y eligiré una de ellas.

Page 28: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

26

Seguimiento y control Como se puede suponer por esta documentación, este Sprint ha ido un poco distinto a

la planificación inicial.

Planificado Real

Cliente web, diagrama de casos de uso 2 horas 0.5 horas

Cliente web, diseño interfaz gráfica 2 horas 0.5 horas

Cliente web, implementación 15 horas 16 horas

Servicios datos de usuario, diseño 4 horas 10 horas

Servicios datos de usuario, Implementación 10 horas --

Documentación 6 horas 6 horas

Total 40 horas 33 horas

Pese a que tenía planificado hacer en este sprint la implementación de los servicios de

los datos de usuario decidí dejarlo para el siguiente sprint. Estos días no pude dedicar todo el

tiempo planificado en el sprint y lo iba a dejar a medias.

Page 29: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

27

Sprint 4: Finalización del Servidor

En este sprint acabo el servidor. Me encargaré de diseñar los servicios orientados a las

actualizaciones del cliente Android e implementaré los servicios que ya tengo diseñados. Si

tengo tiempo, empezaré investigando sobre las tecnologías que voy a necesitar para el

desarrollo de la aplicación Android.

Planificación Servidor, diseño de los servicios de actualización 10 horas

Servidor, implementación de los servicios restantes 10 horas

Reunión con el cliente 2 horas

Realización de cambios 8 horas

Android, investigación sobre tecnologías 4 horas

Documentación 6 horas

Total 40 horas

Diseño de los servicios de actualización A la hora de diseñar estos servicios tengo que tener en cuenta que también tengo que

especificar el sistema de actualización por parte del cliente.

Mi idea principal era que el cliente Android se conectara a internet para descargar las

actualizaciones y quería que parte del contenido viniese instalado. Voy a cambiar esto para

hacerlo más sencillo. Voy a hacer que todo el contenido se descargue del servidor, pero que se

mantenga en el móvil a no ser que el contenido cambie. Esto permitirá al usuario utilizar la

aplicación aunque no tenga internet.

Para lograr mi idea debería hacer un sistema más complejo de lo que tengo hasta

ahora, y sobre todo, debería hacer un cliente Android bastante pesado que contenga toda la

información. Por lo tanto voy a hacerlo de otra manera.

Toda la información va a estar siempre en el servidor. El cliente Android, dependiendo

del lenguaje que se haya escogido, irá descargando sólo la información que necesite. Toda esta

información se guardará localmente lo que ahorrará datos al usuario. Si el dispositivo está en

una red wifi, descargará toda la información que le sea posible sólo mientras se esté usando la

aplicación.

Para llevar todo eso a cabo, el servidor y el cliente tienen que saber lo que necesita el

cliente. Lo que voy a hacer es poner una fecha de modificación en toda la base de datos que

me permita seleccionar los datos modificados desde cierta fecha.

Page 30: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

28

Teniendo en cuenta que el cliente no va a tener ningún solo dato desde el principio, lo

primero que hará será pedir las categorías principales, y a partir de ahí irá pidiendo todos los

artículos de cada categoría. Así conseguirá todos los datos.

Para este sistema tengo que añadir varios servicios más, uno por cada tipo de

contenido que me devuelva los identificadores de cada información cambiada desde cierta

fecha.

Por lo tanto, los servicios que necesito quedan diseñados así:

Tengo que poder acceder a los artículos y las secciones,

así que tengo que tener gets de los dos tipos de contenido. Estos

servicios me devolverán identificadores de cada uno de los

contenidos y con esos identificadores podré recoger la

información completa con los servicios que ya tenía hechos.

Implementación de los servicios Como ya es el segundo sprint que dedico a los servicios, esta implementación ha sido

bastante sencilla y rápida. No he tenido prácticamente ningún problema y lo he hecho en

bastante menos tiempo del planificado.

Reunión con el cliente y cambios En la reunión con el cliente le he enseñado el funcionamiento del administrador web.

Le he enseñado a utilizarlo y de momento no ha sugerido ningún cambio.

Android, investigación de tecnologías Para mi proyecto y su sistema de datos, lo más lógico sería realizar una réplica de la

base de datos en cada uno de los dispositivos para poder acceder localmente a estos datos. La

base de datos será una Sqlite y es muy posible que acompañaré la aplicación de algún tipo de

guardado de opciones.

Para el guardado de los datos, Sqlite es la única opcion que permite el manejo con

comodidad de muchos datos. Y teniendo en cuenta que necesito guardar todos los datos de un

idioma en la aplicación, es la mejor opción. Por supuesto, con archivos XML también se podría

hacer, pero serían poco más una réplica de la base de datos en XML y dependiendo de la

cantidad de los datos o el tamaño, no sería funcional.

A la hora de guardar algún tipo de configuración tenemos 2 opciones: XML y

Preferences. Como Preferences está orientado a este tipo de datos, voy a usarlo. Consiste en la

gestión de pares, clave y valor. Pese a que con los XML también me serviría prefiero usar una

herramienta ya destinada para ello.

Page 31: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

29

He estado investigando llamadas a las api del sistema para saber cuándo estoy

conectado por wifi o datos, o para poder hacer tareas con la aplicación cerrada.

Seguimiento y control Planificado Real

Servidor, diseño de los servicios de actualización 10 horas 10 horas

Servidor, implementación de los servicios restantes 10 horas 6 horas

Reunión con el cliente 2 horas 2 horas

Realización de cambios 8 horas 0 horas

Android, investigación sobre tecnologías 4 horas 4 horas

Documentación 6 horas 6 horas

Total 40 horas 28 horas

Este Sprint ha sido más corto de lo habitual. Analizar y diseñar los servicios de

actualización es lo que más me ha llevado. La implementación de estos servicios ha sido

mucho más liviana de lo que creía y el hecho de no haber tenido cambios en el cliente web me

ha ahorrado mucho tiempo. Pese a ello, he decidido comenzar el siguiente sprint según lo

planificado porque tampoco he tenido mucho tiempo de sobra.

Page 32: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

30

Sprint 5: Diseño del cliente Android

Con este Sprint comienzo el cliente Android. Empezaré diseñando todo lo relativo al

cliente e intentaré llegar a una mínima implementación. Tengo que tener varias cosas en

cuenta.

Intento buscar la optimización y el ahorro de espacio dentro del dispositivo móvil, ya

que aunque ahora sean máquinas bastante potentes, estoy desarrollando con un móvil

bastante viejo. Esto me obliga a utilizar una API de Android antigua, en mi caso la 10. Va a ser

un problema para utilizar ciertos controles. Por lo tanto, todas las decisiones de diseño y

funcionamiento del cliente Android están basadas en esta premisa.

Planificación Cliente Android, diagrama de casos de uso 4 horas

Cliente Android, diagrama de actividad de primer arranque 2 horas

Cliente Android, diagrama de base de datos 6 horas

Cliente Android, interfaz gráfica 10 horas

Cliente Android, diagrama de clases 12 horas

Documentación 6 horas

Total 40 horas

Voy a intentar hacer completo el análisis y diseño del cliente Android. Una parte muy

importante, que es la gestión de actualizaciones, ya la tengo definida de sprints anteriores. Si

llegase a sobrarme tiempo intentaría empezar con la implementación de la base de datos y

diagramas de clases.

Diagrama de casos de uso Una vez me pongo con el cliente Android, lo más importante es tener una manera

Page 33: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

31

sencilla para que el cliente pueda acceder a todo. La usabilidad debe ser ligera e intuitiva. Por

lo tanto el diagrama de casos de uso refleja todo esto.

Para no estar navegando entre todas las secciones de toda la aplicación, el acceso a los

favoritos tiene que ser muy sencillo. Deslizando desde la izquierda te saldrá el típico

“hamburguer menu” que permitirá acceder a los favoritos. También pulsando en el botón de

este tipo de menús.

Diagrama de actividad del primer arranque

Al ser el primer arranque, tengo que especificar cómo voy a hacer la selección de

idioma y sobre todo, cómo el servidor también depende de ello. El logueo y registro dentro del

sistema también se realizará justo al principio aunque será totalmente opcional.

Page 34: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

32

Diseño de la base de datos La base de datos del cliente va a ser una réplica de la base de datos del servidor, pero

más sencilla.

Como se puede ver el cambio más significativo, a parte de no incluir los dos idiomas, es

la inclusión de la entidad Favorito. Como ya he explicado, sólo incluyo un idioma para hacer la

aplicación más ligera. La entidad Favorito es la que se encarga de guardar los favoritos de cada

usuario, y los sincronizará con el servidor.

La transferencia a tablas de este diagrama es igual que en el caso del servidor. La única

diferencia es la entidad favoritos, que conforma una nueva tabla con un sólo campo, el id de

los artículos que serán favoritos para el usuario.

Interfaz gráfica

En esta imagen

podemos ver el menú

principal, que contará con

todas las secciones

principales, y el menú de

favoritos, que como ya he

explicado se mostrará

deslizando desde la

izquierda y pulsando sobre

el botón de menú.

Page 35: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

33

Aquí muestro la

pantalla propia de cada sección

y de cada subsección. Se puede

ver que cada artículo se podrá

añadir a favoritos usando la

estrella que tiene al lado de su

nombre.

Y aquí debajo muestro

las vistas pertenecientes a cada

uno de los tipos de artículos.

No he utilizado los botones

para navegar en pantalla

porque para ir hacia atrás ya

existe el botón físico.

Diagrama de clases Mi diagrama de clases se basa en el del servidor para poder gestionar los datos de la

misma manera. Tendré una persistencia que utilizará la base de datos sqlite diseñada. De esta

persistencia, tirarán las clases de la lógica de negocio. Estas clases serán las mismas que en el

servidor con algunas variaciones.

Page 36: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

34

Como se puede ver, parece una réplica del diagrama del servidor. El cambio más

significativo es el nuevo paquete de Utilidades.

La clase JAdapter se encargará de comunicarse con el servidor y recoger todos los

datos que necesite la aplicación. Parseará toda la información que recoja de los servicios y

enviará los datos al servidor para guardar los favoritos y para la gestión del usuario. Esta clase

se utilizará cuando la base de datos no tenga los datos a los que el usuario está intentando

acceder y cuando existan nuevos datos que descargar.

La clase JUpdater se encargará de gestionar la actualización de los datos. Utilizará la

clase Jadapter para acceder a los datos desde los servicios y los guardará utilizando la

persistencia.

Seguimiento y control Planificado Total

Cliente Android, diagrama de casos de uso 4 horas 2 horas

Cliente Android, diagrama de actividad de primer arranque 2 horas 2 horas

Cliente Android, diagrama de base de datos 6 horas 4 horas

Cliente Android, diseño de la interfaz gráfica 10 horas 12 horas

Cliente Android, diagrama de clases 12 horas 8 horas

Documentación 6 horas 6 horas

Total 40 horas 34 horas

Pese a que se me ha quedado un poco escaso de horas, ya sabía que la interfaz gráfica

me iba a costar bastante. He ahorrado bastante tiempo en la base de datos y en el diagrama

de clases porque no son más que una modificación de lo que ya tenía diseñado para el

servidor.

Page 37: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

35

Sprint 6: Implementación del cliente

Android

Planificación Cliente Android, implementación de la base de datos 8 horas

Cliente Android, implementación del diagrama de clases 20 horas

Cliente Android, implementación de la interfaz gráfica 6 horas

Documentación 6 horas

Total 40 horas

Pese a que la conversión de la base de datos a sqlite debería ser trivial, nunca he

utilizado una base de datos de este tipo por lo que podrían surgir problemas. La

implementación de las clases va a ser bastante costosa por la clase jadapter, que se encargará

de acceder a los servicios. La implementación de la interfaz gráfica no espero que me dé

tiempo. La terminaré en el siguiente Sprint.

Por supuesto, para el desarrollo en Android utilizaré java con una versión específica de

SQL para Sqlite, una versión simplificada.

Base de datos y persistencia A la hora de implementar la base de datos hay que tener en cuenta varios factores. El

lenguaje compatible con sqlite es mucho más sencillo que el compatible con mysql. Esto no me

permite exportar los datos directamente desde MysqlWorkbench a Android.

Lo que he tenido que hacer es adaptar el código que he exportado desde

mysqlworkbench a sqlite. Ha sido bastante sencillo y sólo he tenido que dejar poco más que el

esqueleto de la tabla. Por ejemplo la tabla sección queda así:

CREATE TABLE IF NOT EXISTS 'seccion' ( 'idseccion' INT NOT NULL,

'nombre' VARCHAR(45) NULL, 'seccionPadre' INT NULL, PRIMARY KEY

('idseccion'), FOREIGN KEY ('seccionPadre') REFERENCES 'seccion'

('idseccion') ON DELETE NO ACTION ON UPDATE NO ACTION)

En las demás tablas el código es prácticamente igual.

A la hora de crear la base de datos, en Android es totalmente diferente que en

cualquier otra plataforma que haya trabajado. Normalmente, se crea la base de datos desde

un intérprete sql y se conecta con el servicio de base de datos desde la aplicación. En Android,

no funciona así.

Page 38: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

36

Hay que crear la base de datos desde una clase que implemente SQLiteOpenHelper. En

esta clase hay que implementar los métodos onCreate y onUpgrade.

El método onCreate(SQLiteDatabase db) se ejecutará para crear la base de datos. Ahí hay que ejecutar las consultas necesarias para crear las tablas e insertar los datos. El método onUpgrade, se ejecutará cuando pidamos una versión nueva de la base de

datos. Aquí tendremos que meter el código necesario para poder actualizar la base de datos.

Una vez tenemos la clase que implementa SQLiteOpenHelper, para utilizarla sólo

necesitamos crear una instancia de ella y utilizar el método getReadableDatabase o el

método getWritableDatabase. Eso nos devuelve un objeto SQLiteDatabase, ya sea sólo

en modo lectura o en modo lectura y escritura. Ya podemos utilizarlo para nuestra clase de

persistencia.

Mi clase DBManager me permite acceder a

todos los datos. Tiene los métodos para acceder,

añadir y eliminar todo el contenido.

La peculiaridad de estos métodos es el

acceso a los datos en sí. Tengo que utilizar un

cursor para ello.

Por ejemplo en la clase artículo, para extraer el artículo con un determinado id.

Creamos un cursor que nos dé los datos de la tabla, con los campos que queremos, la

condición y los argumentos necesarios. Después recorremos todo el cursor rellenando el

objeto.

Para los demás objetos es muy parecido. El objeto sección, por ejemplo, tiene varias

llamadas a la base de datos para rellenar las listas de artículos y subsecciones.

Page 39: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

37

Lógica La implementación de las clases ha sido muy sencilla hasta llegar a la clase jadapter.

Las clases son bastante triviales y ya las he implementado

antes en otro lenguaje. Son distintas a las que implementé en php

básicamente porque para poder acceder a la persistencia, tengo

que pasar la base de datos por el constructor de cada una de las

clases.

De este modo, en la clase artículo tengo varios

constructores pero el que me permite rellenarla con los campos

de la base de datos queda así:

Esto me permite desde la base de datos general, tener acceso desde cualquier clase.

A la hora de acceder a los datos de los servicios he tenido que depender de varias

clases.

La clase HttpClient me permite realizar una petición get a mi servicio de acceso al

artículo. Esta petición get la configuro con la url de mi servicio y con el header de json. Una

vez realizada la petición recojo los datos como JSONObject y extraigo los datos según su tipo e

identificación.

Page 40: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

38

A la hora de realizar otra petición get, cuando tengo que recoger los datos de un vocabulario,

hay que tener en cuenta que hay varios elementos en cada petición y que vienen en forma de

JSONArray.

Las peticiones para insertar nuevos datos son más complejas, como podemos ver con el

método de control de los favoritos.

El mayor problema es

tener en cuenta que los

métodos que hacen

cambios en la base de

datos, necesitan una

autenticación específica.

También algunos

métodos que recogen

datos necesitan este tipo

de autenticación que me

da el header

Authorization.

Una vez hecho esto, sólo

tengo que transformar

los datos que quiero

enviar al servicio, en un

tipo JSON. En este caso

utilizo un objetoJSON

y un arrayJSON.

Controlo además que la

respuesta del servidor

sea correcta.

Page 41: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

39

Interfaz gráfica La interfaz gráfica voy a hacerla de dos maneras, con activities y con fragments.

Técnicamente siempre uso activities pero quiero hacer dos clasificaciones.

Los activities son las “pantallas” de las que se compone una app. Tienen tanto su parte

de lógica, la clase, y la párte gráfica, el xml.

Los fragments son componentes que funcionan dentro de una activity y que nos

permiten mostrar varios en una sola activity con interacción entre ellos. Representan una

porción de la interfaz de usuario asociada a una activity.

Voy a tener 2 activities y tantos fragments como sean necesarios. Las 2 activities

comprenden la activity principal, que me permitirá acceder a todo el contenido, y la activity de

opciones, en la que incluiré el apartado de gestión de cuenta y lenguaje.

Todo el resto de la aplicación se gestionará mediante fragments. Es la única manera de

poder tener siempre el menú de favoritos a mano. Para ello, la disposición de los fragments

será la siguiente.

Fragment NavigationDrawer: Es el fragment que siempre estará cargado,

muestra el menú de favoritos.

ActivityMain: Permite la carga de todos los demás fragments. Este fragment es el

principal, contiene el fragment del menú lateral y un FrameLayout, que me permite cambiar el

contenido de la pantalla en cualquier momento.

Esta disposición me permite acceder al contenido sin tener que cambiar de actividad y sin

perder el menú lateral.

Para poder hacer funcionar este

método de los fragments,

desde la activity principal tengo

que controlar a dónde voy a ir.

Para ello tengo que poder

pasarle a cada uno de los

fragments el contenido que

necesiten.

Tengo que crear una función de este tipo por cada uno de los fragments que vaya a tener.

Page 42: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

40

Seguimiento y control Planificado Total

Cliente Android, implementación de la base de datos 8 horas 9 horas

Cliente Android, implementación del diagrama de clases 20 horas 18 horas

Cliente Android, implementación de la interfaz gráfica 6 horas 6 horas

Documentación 6 horas 6 horas

Total 40 horas 40 horas

Page 43: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

41

Sprint 7: Finalización del proyecto

En este Sprint acabo el proyecto. Según mi planificación general, debería invertir en

este sprint 20 horas. Como necesito más tiempo para terminar el proyecto, voy a replanificar

este sprint a 40 horas. Hasta aquí he invertido un poco más de 260 horas. El cómputo global de

horas prácticamente no se va a ver afectado porque actualmente he invertido algunas horas

menos de las planificadas.

Replanificación Finalización de la implementación de la interfaz gráfica 22 horas

Rendimiento de la aplicación 6 horas

Finalización de la documentación 12 horas

Total 40 horas

Layouts He creado un layout para cada

uno de los fragments que voy a utilizar.

Para hacerlos proporcionales a las

dimensiones del móvil, y que no se

vean mal en pantallas de distinto

tamaño a la de prueba, tengo que

utilizar porcentajes. En Android no se

puede hacer directamente, hay que

utilizar el peso (weight) de cada una de

las componentes.

En este caso, muestro parte del

layout del menú principal. Como se

puede ver, le estoy dando a los

componentes la altura o la anchura de

0. Esto lo hago para que tenga en

cuenta el peso como tamaño, y

dependiendo del peso me los haga más

grandes o más pequeños. Según el

peso que tengan, distribuye los

componentes. El peso es un valor

proporcional a su tamaño en pantalla

con respecto a los demás elementos.

En el ejemplo, que es un fragmento del código real, todos tienen el mismo peso

excepto el textView de abajo. En ese caso, el textView lo pondrá el tamaño de su contenido, y

Page 44: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

42

el resto de componentes del layout las pondrá de un tamaño igual ya que todas pesan 1. Si

alguna pesase más de 1, esa componente sería más grande que las demás, tantas veces más

grande como el propio peso.

Todo esto, me permite que la interfaz gráfica se vea exactamente igual en cualquier

dispositivo Android.

La interfaz final del menú principal queda así:

Page 45: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

43

ArrayAdapter Para que los layouts muestren en sus listas los datos que me interesan, tengo que

crear y modificar Adapters. Un adapter me permite “adaptar” un ListView para que muestre

imágenes u otro tipo de controles.

En varios layouts he necesitado crear ArrayAdapters.

Como se ve, el ArrayAdapter que creo para mostrar los datos de la

interfaceArticuloSeccion, contiene un TextView y un ImageView. Con esta

clase, le puedo dar el aspecto que quiera, y en el fragment, usarlo para la ListView.

Como se ve en la imagen superior, estoy utilizando una interfaz poco menos que llamativa:

interfaceArticuloSeccion. Pese a que desde el punto de vista de la lógica esta

interfaz no tenga sentido, me es necesaria para el uso en arrayList. Esta interfaz se

implementa en la clase Sección y Artículo. Tiene 3 métodos, getId, getNombre y

getTipo. getTipo devuelve el tipo de cada uno de los artículos y también, si es una

subsección me devuelve este valor. Esto me permite a la hora de cargar una imagen en el

Adapter, que la imagen sea personalizada dependiendo del tipo de la interfaz. Es una

aplicación del patrón Factoría.

Page 46: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

44

Control del flujo de la aplicación Como ya he explicado en el sprint anterior, la aplicación va a gestionarse con métodos

públicos llamados desde el activityMain. Estos métodos permitirán acceder a todos los

fragments, y cargarán la información antes de acceder a ellos.

Pero a la hora de volver atrás, la aplicación debería recordar la selección de fragments

que he ido haciendo. Para eso, he implementado una pila que almacena el fragment en el que

estoy, y me permite desapilar a la hora de ir hacia atrás.

Este código no me es necesario a la hora de volver atrás con el activity de las opciones,

ya que el propio flujo de los activitys lo hace automáticamente.

Page 47: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

45

Rendimiento de la aplicación Para que la aplicación Android funcione lo más fluida posible, he tenido que diseñarla y

hacer cambios que en otro tipo de aplicaciones serían perjudiciales. Suelen ser bastante

comunes este tipo de arreglos para una aplicación móvil.

Por ejemplo, en la base de datos, he creado un campo en la tabla artículos que me dice

el tipo de artículo que es cada uno. De esta manera me ahorro una operación bastante costosa

y la sustituyo por un dato bastante pequeño.

También, varios tipos de datos los he sustituido por enumeraciones. A la hora de

mostrar los tipos de artículos, en una enumeración aglutino su tipo y la imagen asociada.

El rendimiento con el fragment lateral también lo he revisado quitándole

transparencias y consiguiendo de esta manera que sea más fluido.

Seguimiento y control Planificado Total

Finalización de la implementación de la interfaz gráfica 22 horas 18 horas

Rendimiento de la aplicación 6 horas 4 horas

Finalización de la documentación 12 horas 12 horas

Total 40 horas 34 horas

Con este Sprint doy por finalizado el proyecto.

Page 48: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

46

Conclusión Antes de explicar detenidamente las conclusiones de mi proyecto, voy a revisar cómo

he gestionado los tiempos dentro de la planificación general de mi proyecto. También voy a

hablar sobre la satisfacción de mi cliente.

Tiempos reales y planificados

Como está explicado en el diagrama de Gantt y en los sprints, he seguido siempre la

planificación general. Siempre que el Sprint ha sido más grande de lo planificado, lo he

terminado en el plazo, con una excepción. En el sprint 3, hubo un apartado planificado que no

me dió tiempo a realizar en el plazo. Este apartado fué integrado en el Sprint 4.

Creo que a la hora de seguir el proyecto he hecho bien en no dejar las cosas para el

siguiente sprint y acabarlo en el plazo. Pero esto tiene una desventaja, que a la hora de

adelantar trabajo, por seguir la planificación general, no lo he hecho. Es posible que en

proyectos futuros tenga menos en cuenta el calendario en esa segunda parte, ya que el tiempo

que gane adelantando trabajo nunca sabes cuándo te va a hacer falta.

Satisfacción del cliente Mi cliente ha quedado bastante satisfecho con el proyecto. Pese a ello, ya me ha

indicado mejoras y cambios que puedo realizar. El primer cambio es la interfaz del

administrador web.

Mi cliente ya sabía que iba a ser un prototipo, ya que su objetivo era la app Android.

Por eso, mi orientación a la hora de realizar el proyecto fue hacer una interfaz sin

complicaciones y que hiciese su trabajo.

Por eso mismo, el primer cambio va a ser esta interfaz.

Page 49: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

47

El resto del proyecto, le ha gustado mucho. En especial, tanto el menú principal como

la opción de acceder a los artículos favoritos desde cualquier parte de la aplicación.

Conclusion final Este proyecto presentaba hasta tres partes muy diferenciadas. En las tres puedo decir

que he cumplido con los objetivos requeridos.

El uso de la metodología SCRUM me ha permitido avanzar rápidamente en el

desarrollo y a la vez corregir fallas de anteriores sprints. Al presentarle al cliente el

administrador web, ha permitido que de su confirmidad con el desarrollo hasta ese momento,

dando por bueno el diseño del servidor. Podría haber introducido cambios y hasta ese

momento no habrían sido demasiado costosos. Además, el realizar los servicios por partes me

ha dado la posibilidad de pensar con calma esa parte y de entender perfectamente el

funcionamiento del framework sin perder tiempo.

A la hora de la planificación, sí que han existido varios Sprints en los que he tenido una

variación significativa entre lo planificado y lo real. Pese a ello, he conseguido terminar el

proyecto según lo planificado.

Siempre es muy interesante aprender acerca de nuevas tecnologías y, pese a que la

mayoría de las que he utilizado ya las conocía, he podido profundizar en ellas. El uso de

fragments en Android o el uso de frameworks como SLIM son ejemplos de ello.

Por todo esto creo que ha sido un buen proyecto y además es un proyecto que puede

tener un futuro comercial.

Page 50: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

48

Mejoras del proyecto Pese a que los objetivos del proyecto se han cumplido, siempre existen mejoras que se

pueden realizar en un futuro.

Interfaz gráfica: como ya he explicado, el primer cambio sería rehacer la interfaz

gráfica del administrador web. También se podría mejorar la del cliente Android.

Creación de un cliente Web: puede que sea la más necesaria, ya que algunos artículos

podrían ser demasiado grandes para leerlos cómodos en el móvil. Además, le daría más

sentido a la sincronización de los datos entre el cliente y el servidor.

Versión del cliente a Windows Phone y IOS: Android es la plataforma mayoritaria, pero

también sería una opción crear los clientes para estas dos plataformas. Se podría reutilizar la

gran mayoría de código excepto el que se encarga de la interfaz gráfica. Además, existen

herramientas que te hacen estas versiones automáticas sin apenas perder tiempo.

Funcionalidad en el Cliente Android: otra mejora sería el permitir comentarios y subida

de fotografías en el apartado de recetas o manualidades. Le daría un componente de

interacción entre usuarios muy interesante.

Page 51: Desarrollo de la aplicación Android del blog ...En Android, las bases de datos son Sqlite. Seguramente mi proyecto necesite una base de datos en el cliente Android pero no lo tengo

49

Bibliografía

Android Developers

http://developer.android.com/guide/index.html

StackOverflow

http://stackoverflow.com

SLIM

http://docs.slimframework.com/

PHP Documentation

http://php.net/manual/en/