Академический Документы
Профессиональный Документы
Культура Документы
Ingeniera de Telecomunicacin
Autor:
Jos Mara Valverde Baena
Tutora:
Mara Teresa Ariza Gmez
Profesora titular
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2015
6 ndice de Tablas
El Secretario del Tribunal
A mi familia
A mis maestros
8 ndice de Tablas
Agradecimientos
Han pasado muchos das desde que puse mi primer pie en Sevilla para comenzar mi etapa universitaria. An
guardo en una parte de mi corazn la ilusin con la que dese que empezara todo.
En estos aos he pasado por momentos de todo tipo, buenos y no tan buenos, pero todos estos momentos han
sido endulzados por todas aquellas personas que me acogieron en Sevilla como en mi segunda casa. Por eso,
rescato en estas lneas a todas aquellas personas que he tenido la oportunidad de conocer y, de las que siempre
tendr una buena ancdota que las recuerde.
Gracias a todos, CMU San Juan Bosco.
Gracias a mis padres, ambos habis estado presente en aquellos momentos en los que ms os he necesitado,
siempre con unas palabras de nimo o un consejo. Esto tambin es fruto del esfuerzo y constancia que habis
invertido en m.
Siempre os querr
Gracias a mi hermana, Inmaculada, t me has guiado en este mar de dudas con tus consejos y experiencias.
Siempre has estado junto a m en los momentos en los que ms te he necesitado, tus mensajes, tus palabras y,
esas visitas relmpago en Enero Dios bien sabe que me dieron la vida. Aunque ests en Chile, siempre te
tengo en mi mente.
Gracias a mi yaya, s que t lo has llegado a pasar peor que yo en todos aquellos momentos en los que tena un
examen. Gracias por incluirme en tus plegarias y, tenerme siempre en mente. Todo ello me ha ayudado a
levantarme en los momentos ms duros.
Abuela, este camino ha llegado a su fin y aunque no ests a mi lado para celebrarlo, me has acompaado en
los momentos ms duros. Con esos momentos en mente, miro al cielo y te doy las gracias por todo.
Por ltimo, gracias a toda mi familia, por haberos preocupado de m, especialmente durante estos seis aos.
A todos vosotros, que ya formis parte de m, os quiero.
Agradecimientos 9
ndice 11
ndice de Tablas 15
ndice de Figuras 17
1 Introduccin 23
1.1 Contexto 23
1.1.1 Presentacin del problema 23
1.2 Antecedentes 25
1.2.1 Introduccin 25
1.2.2 Otras referencias 25
1.3 Descripcin de la solucin 27
1.3.1 Objetivos 27
1.3.2 Funcionalidades 29
1.3.3 Arquitectura 31
1.4 Estructura de la memoria 32
2 Tecnologas utilizadas 35
2.1 Introduccin 35
2.2 Android 36
2.3 JSON 37
2.4 Eclipse 38
2.4.1 Uso de eclipse en el proyecto 38
2.5 XAMPP 44
2.5.1 Mdulo Apache 45
2.5.2 Mdulo MySQL 45
2.6 Advanced REST Client 45
2.7 Wireshark 46
2.8 Notepad++ 48
2.9 Imgur 48
2.9.1 Formatos disponibles 49
2.9.2 Conclusiones 50
2.10 Servicio Web 50
2.10.1 Historia 50
2.10.2 Definicin 51
2.10.3 Eleccin de un servicio web RESTful 53
2.10.4 REST 53
2.11 JAX-RS 55
2.11.1 Especificacin 55
2.12 Jersey 56
2.12.1 Mapeo de peticiones web 57
2.12.2 Soporte de JSON 58
3 Servicio web desarrollado 61
3.1 Arquitectura de la aplicacin 61
3.2 Comunicacin con el servicio web 62
12 ndice de Tablas
3.2.1 URIs y mtodos. Relacin 63
3.2.2 Diagrama de secuencia 68
3.3 Base de datos 74
3.3.1 Introduccin 74
3.3.2 Utilizacin de las tablas 76
3.3.3 Almacenamiento de videos 77
4 Aplicacin del entrenado. acceso al servicio 79
4.1 Introduccin 79
4.2 Pantalla de inicio 81
4.2.1 Botn de preferencias 83
4.2.2 Botn de registro 90
4.2.3 Botn Login 92
4.2.4 Botn de recordatorio de contrasea 94
4.3 Pantalla de bienvenida usuario 95
4.3.1 Modificacin de datos 96
4.3.2 Cerrar sesin 97
4.4 Entrenamiento 98
4.4.1 Entrenamiento personalizado 99
4.4.2 Entrenamiento libre 108
4.5 Usuario no registrado 108
5 Conclusiones y lneas futuras 111
5.1 Lneas de continuacin del proyecto 111
5.1.1 Parte del entrenado 111
5.1.2 Parte del entrenador 112
5.1.3 General 112
5.2 Conclusiones 112
5.2.1 Tcnicas 112
5.2.2 Personales 113
6 Bibliografa 115
Anexo A: Impacto de la aplicacin 117
1. Introduccin 117
2. Descripcin 117
2.1 mbito de usuario 117
2.2 mbito del entrenador 120
Anexo B: Estudio cuota de mercado 125
1. Introduccin 125
2. Cuota de Mercado actual 125
2.1 nalisis de la tendencia 125
Anexo C: Crear proyecto web 127
Introduccin 127
2. Proyecto Maven 127
3. Proyecto web dinmico 131
Anexo D: Manual de instalacin 133
1. Instalacin de XAMPP 133
2. Instalacin de Eclipse 139
3. Instalacin de JDK 142
4. Instalacin de Android SDK 147
4.1 Vinculacin de Android SDK y Eclipse 152
5. Instalacin de Apache Tomcat 154
Anexo E: Cdigos Java y XML de la aplicacin Android 157
1. Familia MainActivity 157
1.1 MainActivity.java 157
1.2 activitymain.xml 163
Familia HiScreen 165
2.1 HiScreen.java 165
2.2 hiscreen.xml 168
3. Familia RegScreen 170
3.1 RegScreen.java 170
3.2 regscreen.xml 175
4. Familia NoRegscreen 177
4.1 NoRegscreen.java 177
4.2 noregscreen.xml 178
5. Familia Forgetscreen 179
5.1 Forgetscreen.java 179
5.2 forgetscreen.xml 182
6. Familia Preferencias 183
6.1 Preferencias.java 183
6.2 preferencias.xml 186
7. Familia WelcomReg 187
7.1 WelcomReg.java 187
7.2 welcomreg.xml 190
8. Familia WelcomNoReg 191
8.1 WelcomNoReg.java 191
8.2 welcomnoreg.xml 194
9. Familia Modify 195
9.1 Modify.java 195
9.2 modify.xml 201
10. Familia ListaActivity 203
10.1 ListaActivity.java 203
10.2 listaactivity.xml 205
10.2.1 listado.xml 206
10.2.2 entrada.xml 206
11. Familia Welcom2start 208
11.1 Welcom2start.java 208
11.2 welcom2start.xml 213
12. Familia Lista_videos 214
12.1 Lista_videos.java 214
12.2 lista_video.xml 218
12.2.1 listado.xml 218
12.2.2 entrada6.xml 219
13. Familia Video 221
13.1 Video.java 221
13.2 video.xml 221
14. Familia Lista_ejercicios 222
14.1 Lista_ejercicios.java 222
14.2 lista_ejercicios.xml 226
14.2.1 listado.xml 227
14.2.2 entrada2.xml 227
15. Familia Ejercicio 229
15.1 Ejercicio.java 229
15.2 ejercicio.xml 240
16. Familia Informacion 244
16.1 Informacion.java 244
16.2 informacion.xml 245
17. Familia Lista_util 246
17.1 Lista_util.java 246
14 ndice de Tablas
17.2 lista_util.xml 250
17.2.1 listado.xml 251
17.2.2 entrada3.xml 251
18. Familia Fotoutil 253
18.1 Fotoutil.java 253
18.2 fotoutil.xml 254
19. Familia Lista_musculo 255
19.1 Lista_musculo.java 255
19.2 lista_musculo.xml 259
20. Familia Fotomusculo 262
20.1 Fotomusculo.java 262
20.2 fotomusculo.xml 263
21. Familia Fotos 264
21.1 Fotos.java 264
21.2 fotos.xml 265
22. AndroidManifest.xml 267
23. string.xml 269
Anexo F: Cdigos Java del WS 272
1. Paquete com.josvalbae.db 273
1.1 ConexionBD.java 273
1.2 Ejercicios.java 275
1.3 List_Ejercicios.java 276
1.4 Musculos.java 277
1.5 List_Musculos.java 278
1.6 Rutinas.java 278
1.7 List_Rutinas.java 279
1.8 Utiles.java 280
1.9 List_Utiles.java 281
1.10 Recursos.java 281
1.11 List_Recursos.java 282
2. Paquete com.josvalbae.rest 282
2.1 PrincipalWS.java 282
3. Paquete com.josvalbae.mail 298
3.1 SendMail.java 298
3.2 GetSystemPreferences.java 299
4. Paquete com.josvalbae.user 301
4.1 UsuarioDB.java 301
4.2 Configuracion.java 303
4.3 ECheckData.java 304
5. Ficheros XML 305
5.1 pom.xml 305
5.2 web.xml 306
NDICE DE TABLAS
Antonio Machado
1 INTRODUCCIN
En este primer captulo se expondrn los diferentes objetivos y motivaciones que han
servido de precedente a la realizacin de este proyecto. Adems definiremos cuales han
sido los antecedentes a este trabajo. Por ltimo, indicaremos que estructura va a tener
nuestra memoria.
1.1 Contexto
Los motivos suelen ser diversos, tales como imposibilidad en el desplazamiento o por
falta de tiempo. Por otro lado, se podra decidir realizar un entrenamiento a distancia
simplemente por la comodidad que ste aporta.
Base de
Internet datos
El entrenado hace ejercicios sin saber si lo que est realizando es correcto, incluso
el Usuario 2 padece algn tipo de lumbalgia. Ambos seleccionan una rutina para el
puede que sin ningn problema, pero a largo plazo su lumbalgia se agravar. Esto es debido
a que, a pesar de no ser la zona lumbar una zona muscular que se trabaje directamente
cuando uno realiza sentadillas, sta trabaja de manera indirecta. Por lo que su zona lumbar
Por otro lado, un detalle que nos llama la atencin es, que prcticamente la totalidad
cierne. Esto, sumado a que no aparecen imgenes demasiado descriptivas, puede llevar a
confusin al usuario.
Nosotros hemos tenido en cuenta, bajo nuestra humilde opinin, todas las carencias
que hemos podido detectar a la hora de proponer la solucin, aunque el camino es largo.
Por todo ello, nuestra aplicacin estara complementando ese vaco que hemos detectado,
pudiendo tener una gran aceptacin y estrechando las barreras entre el mundo profesional
y el usuario final.
24
1.2 Antecedentes
En esta seccin se presentarn los antecedentes que han servido de base a este
proyecto y, sin los cuales no hubiera sido posible la realizacin del mismo.
Por parte de un presente, se espera que la alternativa aqu propuesta sirva tambin de
inspiracin a algn otro proyecto en lneas futuras.
1.2.1 Introduccin
Dicho proyecto, tena como objetivo solventar las carencias que nosotros hemos
subrayado en el apartado 1.1.1 Presentacin del problema.
La principal diferencia que estriba entre los dos proyectos, es la manera en la que
se ha implementado la solucin. Dicho proyecto, realizaba una aplicacin Android de
carcter deportivo que se pona en contacto con un servidor web donde haba alojados
unos scripts PHP. stos, dotaban de funcionalidad al sistema, pues eran los que
realizaban las labores de comunicacin con la base de datos. Esta base de datos era
donde se almacenaba toda la informacin que la aplicacin usaba.
Adems de los proyectos mencionados que nos han servido como base, nos
apoyaremos tambin en un proyecto3 perteneciente a la Universidad Politcnica de
Cartagena, concretamente a la Escuela Tcnica Superior de Ingeniera de
El autor hace una comparativa entre la eficiencia de usar JSON o XML para
intercambiar ficheros usando un dispositivo Android. Dicha eficiencia se mide en
nmeros de objetos analizados por milisegundo.
Las conclusiones que sacamos de este proyecto, y que nos servirn en el siguiente
captulo4 son:
4 2: Tecnologas utilizadas
26
Las conclusiones son, que JSON es la mejor herramienta para compartir datos en
red. Esto se debe a que los datos estn almacenados en vectores y registros, mientras
que XML almacena los datos en rboles. Ambos tienen sus ventajas. Sin embargo, en el
contexto donde nos encontramos de intercambio de datos en red, es obvio que la
eleccin del tipo de dato a utilizar sea la de JSON, principalmente por las siguientes
razones:
Los datos que vamos a intercambiar son pequeos. (Sin los datos fueran
grandes, lo ptimo sera usar XML.)
1.3.1 Objetivos
Tenemos que aadir, que tambin se han tenido en cuenta aquellos usuarios que
no estn registrados en el sistema y, por tanto, que no dispongan de un entrenamiento
personalizado. Para ello, se ha habilitado una parte de prueba, as los usuarios podrn
probar la aplicacin y su funcionamiento, teniendo como es obvio un acceso limitado a
las rutinas de ejercicios, as como, de no disponer en ningn momento del seguimiento
deportivo por parte del especialista. De esta manera, si tras dicha prueba los usuarios
quedan satisfechos podrn realizar el registro y ponerse en contacto con el profesional
en cuestin para que le asesore y le asigne una rutina de ejercicios adecuada.
Debemos tener en cuenta que la manera en la que las rutinas son asignadas por
el mdico, fisioterapeuta o entrenador a los diferentes usuarios quedan totalmente
excluidas del mbito de desarrollo del proyecto y, por tanto, de esta aplicacin, al igual
que aspectos relacionados con la seguridad en las comunicaciones o la encriptacin de
datos, quedando como lneas futuras de desarrollo de este trabajo.
28
Servidor BD
Rutina
Login personalizada
Operaciones de comprobacin entre el
Respuesta servicio web y la base de datos
Consulta de
rutina
personaliza Consulta Consulta
da
Descarga de
Respuesta Respuesta Respuesta rutina
Entrenamiento
personalizado
1.3.2 Funcionalidades
En una pantalla inicial y, una vez iniciada la aplicacin, sta deber de permitir al
usuario diversas opciones que nuestro servicio web se encargar de implementar y, que
nombraremos en esta subseccin.
Dentro del acceso detallado a cada uno de los ejercicios que conforman una rutina, el
usuario dispondr de distintas opciones informativas a elegir para cada ejercicio
seleccionado, que sern:
30
Por ltimo, un video explicativo del ejercicio, donde se mostrar la realizacin del
ejercicio.
1.3.3 Arquitectura
Servicio Web
RESTful
Servidor
externo
En nuestro primer captulo, se recoge una breve descripcin del proyecto. A raz de
la presentacin del problema que queremos resolver, definiremos los objetivos de
nuestro proyecto. Adems fijaremos cuales han sido nuestros antecedentes a la hora de
realizar el proyecto y las referencias que hemos utilizado, terminado con un breve esbozo
de la estructura que seguir nuestra memoria.
32
En el cuarto captulo, se explicar cmo nuestra aplicacin hace uso del servicio web
para realizar todas las funciones que sta requiere. Dicha explicacin se apoyar en la
interfaz de usuario que presenta nuestra aplicacin Android, para una mejor compresin.
Ahora le toca el turno a los anexos. Ellos reflejan, en cierto aspecto, la gran cantidad de
detalles a tener en cuenta en la elaboracin de dicho proyecto.
Nuestro primer anexo trata de presentar al lector un estudio sobre el posible impacto
que tendra el lanzamiento de nuestra aplicacin. En l hemos tenido en cuenta diversos
detalles de la sociedad actual espaola. Y adems, se pasan a comentar las ventajas
que supondra tanto para el entrenado como para entrenador.
34
2 TECNOLOGAS UTILIZADAS
En este nuevo captulo, daremos paso a la descripcin del entorno de desarrollo
utilizado para poder llevar la realizacin de nuestro proyecto, explicando cada uno de los
elementos que intervienen.
Del mismo modo, iremos tejiendo una argumentacin que relacione nuestra toma de
decisin con las bases del proyecto que tomamos como antecedente.
2.1 Introduccin
RESTful
BD
Web Service MySQL
Ahora s, podemos esbozar una fina lnea que guiar el desarrollo a seguir en este
captulo perteneciente a nuestra memoria. En primer lugar, pasaremos a introducir qu
son los servicios web e identificaremos nuestro servicio web como uno basado en la
especificacin JAX-RS, por estar caracterizado ste por un estilo arquitectnico REST.
Discutiremos qu es JAX-RS y REST y, argumentaremos la validez de nuestra solucin.
Tras esto, introduciremos Jersey explicando qu es y qu alternativas existen
2.2 Android
Tambin hemos usado otro proyecto en el cul se hace un estudio comparativo entre la
eficiencia de intercambiar datos JSON o XML desde un dispositivo Android.
8 Aplicacin Android para la rehabilitacin fsica de usuario usando MySQL, PHP, y codificacin JSON
36
Por un lado, rescatando las conclusiones del autor expuestas en la correspondiente
subseccin9, queda justificada la eleccin de JSON en nuestro proyecto para comunicar
la aplicacin Android y el servicio web REST. Y por otro, haciendo referencia al
correspondiente anexo10 sobre el estudio de la cuota de mercado actual en Espaa
queda justificado el uso de Android.
2.3 JSON
Tan solo, nos limitaremos a mostrar la estructura de un objeto JSON para aquellos
a quienes les sea desconocido.
2.4 Eclipse
38
2.4.1.1 Cliente Android
Para llevar a cabo el proyecto se ha usado Eclipse, entorno de trabajo que permite
desarrollar aplicaciones para Android de una manera ms sencilla, ya que dispone de
diferentes herramientas que facilitan el trabajo al programador, tales como un compilador
java, as como el emulador de un Smartphone con el sistema operativo Android donde
instalar la aplicacin y ver su correcto funcionamiento, ahorrando al desarrollador tener
que instalar el ejecutable de la aplicacin en un dispositivo mvil fsico.
Dicha estructura est compuesta por una serie de ficheros principales en los que
estn, por un lado, la lgica de la aplicacin, por otro lado el entorno grafico de la
aplicacin y por ultimo las fuentes locales que usa la aplicacin (imgenes, fotos, etc.).
Por otro lado, la carpeta res contiene el entorno grfico de la aplicacin, es decir,
las pantallas que veremos en la aplicacin, tanto horizontal (layout-land) como vertical
(layout-port), as como los recursos (imgenes o fotos) usados en la aplicacin (carpetas
drawable). Estas pantallas carecen de lgica alguna, estn escritas en cdigo XML.
40
Nosotros elegiremos a Maven como solucin a implementar debido a las claras
ventajas que nos presenta.
En primer lugar, conviene saber que Maven es una herramienta de software para
la gestin y construccin de proyectos Java. Es similar en funcionalidad a Apache Ant,
pero tiene un modelo de configuracin ms simple, basado en un formato XML. Maven
utiliza un POM14 para describir el proyecto software a construir, sus dependencias de
otros mdulos y componentes externos, as como el orden de construccin de los
elementos.
Una caracterstica clave de Maven es que est listo para usar en red. El motor
incluido en su ncleo puede dinmicamente descargar plugins de un repositorio, el
mismo repositorio que provee acceso a muchas versiones de diferentes proyectos Open
Source en Java, de Apache y otras organizaciones y desarrolladores. Otra clara ventaja
que presenta Maven son los arquetipos. Un arquetipo es como una plantilla de proyecto,
un patrn que define el tipo de proyecto, el cual puede ser usado como prototipo a utilizar
por cada desarrollador.
Una vez presentado Maven podemos concluir que como desarrollador, nos
podemos olvidar los problemas de consistencia de los proyectos usando los arquetipos
que Maven nos ofrece y, adems dejamos de preocuparnos de tener que gestionar todas
las libreras, importndolas de proyecto en proyecto, o bien, teniendo que llevarlas junto
a nuestro cdigo por si otro desarrollador quiere proseguir con nuestro trabajo. Esto
ltimo, gracias al fichero pom.xml que usa Maven.
Artefacto
Otra diferencia con un proyecto Java, es que Maven va a tener un archivo pom.xml.
Es un fichero XML fundamental en Maven que contiene informacin sobre el proyecto y
42
la configuracin, sera como el equivalente al AndroidManifest.xml de un proyecto
Android. A continuacin, mostramos su estructura:
2.5 XAMPP
44
Figura 15. Panel de control de XAMPP
Advanced REST Client es una herramienta que puede encontrarse como plugin
para el navegador Google Chrome y, que como su propio nombre indica hace las veces
de un cliente REST. Adems, ayuda a cualquier desarrollador web a crear y testar
peticiones HTTP de prueba.
Presenta un interfaz muy simple, incluso para usuarios que no hayan usado
ningn cliente REST anteriormente. Adems nosotros haremos un uso bsico,
introduciendo por un lado:
o HOST
o PATH
Ambas opciones son, por supuesto, igual de vlidas para realizar un test de
nuestros servicios. Como observacin, podramos aadir que la segunda est ms
estructura desde el punto de vista del consumo de recursos para el que est definido los
servicios web REST.
2.7 Wireshark
46
Figura 17. Logo wireshark
De esta manera estaremos filtrando todas las peticiones GET y POST, y nuestra
bsqueda de paquetes se har mucho ms fcil.
2.8 Notepad++
Por otro lado, nos limitaremos a decir que es un editor de texto que soporta varios
lenguajes de programacin. Y nosotros lo hemos usado para escribir los cdigos fuente
que estn en Java y XML, sin la necesidad tener que usar el editor de Eclipse.
2.9 Imgur
Es un sitio web que hemos usado para almacenar y compartir todas las imgenes
que forman parte de la base de datos de forma totalmente gratuita.
Imgur.com es un sitio que nos permite alojar imgenes en forma segura tal y como
lo hacemos en otras webs. Sin embargo, muchos de estos servicios de hosting nos
presentan una serie de molestos y fastidiosos problemas al momento de alojar imgenes.
48
El hosting de imgenes promedio (como Imageshack, Photobucket, por decir
algunos), nos ofrece subir tus imgenes, pero tenemos que guardar el link que nos
otorgan porque el propio hosting desecha la URL y la imagen se pierde en lo ms
recndito de la Internet.
En Imgur podemos subir imgenes a una cuenta que podemos crear rpidamente
y de forma gratuita. Adems, tenemos la posibilidad de editar cualquier foto online, desde
el mismo navegador, sin necesidad de utilizar otro programa.
Imgur guarda nuestras imgenes en nuestra cuenta y nos otorga varios formatos
de Links para poder utilizarlos en distintos tipos de webs, desde el formato BB code19
hasta un Cdigo HTML para incrustar, como se puede apreciar en la columna de la
derecha, donde aparecen los distintas direcciones.
2.9.2 Conclusiones
En esta seccin haremos una introduccin a los servicios web con su posterior
clasificacin y eleccin de la solucin.
2.10.1 Historia
50
comunicacin. Los Servicios Web surgieron entonces, ante una necesidad de
estandarizar la comunicacin entre distintas plataformas (PC, Mainframe, Mac, etc.) y
lenguajes de programacin (PHP, C#, Java, etc.).
En 1990, surgieron los modelos COM y CORBA20. El primero, fue creado por
Microsoft, y el segundo, por el Object Management Group. No obstante, estos dos
modelos presentaban un hndicap muy importante: no eran fcilmente interoperables.
2.10.2 Definicin
Existen mltiples definiciones sobre lo que son los Servicios Web, lo que muestra
su complejidad a la hora de dar una adecuada definicin que englobe todo lo que son e
implican. Una posible sera hablar de ellos como un conjunto de aplicaciones o de
tecnologas con capacidad para interoperar en la Web. Estas aplicaciones o tecnologas
intercambian datos entre s con el objetivo de ofrecer unos servicios. Los proveedores
ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio
llamando a estos procedimientos a travs de la Web.
Apache CXF
Jersey
RESTEasy
52
Restlet
Apache Wink
JBoss
En primer lugar, tenemos que apuntar que el alcance de nuestro proyecto era la
implementacin de una solucin basada en servicios web. Dicho esto, veremos porqu
tiene sentido usar la especificacin JAX-RS en lugar de JAX-WS.
Por tanto, queda claro proponer como solucin la utilizacin de un Servicio Web REST
para nuestro proyecto. En la siguiente subseccin, pasaremos a introducir el concepto
de REST.
2.10.4 REST
HTTP
URL
Representacin de los recursos: XML/HTML/GIF/JSON/JPEG/
Tipos MIME: text/html, application/json
describe a REST como un estilo de arquitectura que explorar de una forma bsica la
tecnologa existente y los protocolos de la Web, incluyendo XML y HTTP.
Como hemos dicho, REST utiliza HTTP, entonces es mucho ms sencillo. Desarrollar
APIs, crear cliente y la documentacin es ms fcil de entender. Adems, permite
inmeros formatos de datos, dando al desarrollador la posibilidad de utilizar JSON,
permitiendo a su vez un mejor soporte a los clientes del navegador. Debido a que nuestro
objetivo est en desarrollar algo sencillo, practico y que presente buena escalabilidad y
rendimiento, REST ser nuestra solucin.
Los sistemas que se rigen por los principios REST son llamados normalmente
RESTful.
Una sintaxis universal para identificar los recursos. En un sistema REST, cada
recurso se puede direccionar nicamente a travs de su URI.
54
El uso de hipermedios como motor para poder indicar las diferentes acciones.
Como resultado de esto, es posible navegar de un recurso REST a muchos
otros, simplemente siguiendo enlaces sin requerir el uso de registros u otra
infraestructura adicional.
2.11 JAX-RS
JAX-RS: Java Api for RESTful Web Services es una API del lenguaje de
programacin Java que proporciona soporte en la creacin de servicios web de acuerdo
con el estilo arquitectnico REST. JAX-RS permite el uso de anotaciones, introducidas
en Java SE 5, para simplificar el desarrollo y despliegue de los clientes y puntos finales
de los servicios web.
A partir de la versin 1.1, JAX-RS es una parte oficial de Java EE 6. Al ser parte
oficial de Java EE, no se requiere configuracin para comenzar a usar JAX-RS.
2.11.1 Especificacin
Annotation Description
@Path The @Path annotations value is a relative URI path indicating where the Java class will be
hosted: for example, /helloworld. You can also embed variables in the URIs to make a
URI path template. For example, you could ask for the name of a user and pass it to the
application as a variable in the URI: /helloworld/{username}.
@GET The @GET annotation is a request method designator and corresponds to the similarly
named HTTP method. The Java method annotated with this request method designator will
process HTTP GET requests. The behavior of a resource is determined by the HTTP
method to which the resource is responding.
@POST The @POST annotation is a request method designator and corresponds to the similarly
named HTTP method. The Java method annotated with this request method designator will
process HTTP POST requests. The behavior of a resource is determined by the HTTP
method to which the resource is responding.
@PUT The @PUT annotation is a request method designator and corresponds to the similarly
named HTTP method. The Java method annotated with this request method designator will
process HTTP PUT requests. The behavior of a resource is determined by the HTTP
method to which the resource is responding.
56
Tecnologas utilizadas
@DELETE The @DELETE annotation is a request method designator and corresponds to the similarly
named HTTP method. The Java method annotated with this request method designator will
process HTTP DELETE requests. The behavior of a resource is determined by the HTTP
method to which the resource is responding.
@HEAD The @HEAD annotation is a request method designator and corresponds to the similarly
named HTTP method. The Java method annotated with this request method designator will
process HTTP HEAD requests. The behavior of a resource is determined by the HTTP
method to which the resource is responding.
@PathParam The @PathParam annotation is a type of parameter that you can extract for use in your
resource class. URI path parameters are extracted from the request URI, and the parameter
names correspond to the URI path template variable names specified in the @Path class-
level annotation.
@QueryParam The @QueryParam annotation is a type of parameter that you can extract for use in your
resource class. Query parameters are extracted from the request URI query parameters.
@Consumes The @Consumes annotation is used to specify the MIME media types of representations a
resource can consume that were sent by the client.
@Produces The @Produces annotation is used to specify the MIME media types of representations a
resource can produce and send back to the client: for example, "text/plain".
@Provider The @Provider annotation is used for anything that is of interest to the JAX-RS runtime,
such asMessageBodyReader and MessageBodyWriter. For HTTP requests,
theMessageBodyReader is used to map an HTTP request entity body to method
parameters. On the response side, a return value is mapped to an HTTP response entity
body by using aMessageBodyWriter. If the application needs to supply additional
metadata, such as HTTP headers or a different status code, a method can return
a Response that wraps the entity and that can be built
using Response.ResponseBuilder.
2.12 Jersey
56
Por ser esta implementacin la de referencia de la especificacin JAX-RS, nos ha
parecido correcto tomar el mismo enfoque para el desarrollo de nuestro servicio web.
Desde la pgina oficial de Jersey29 nos dan las pautas acerca de cmo configurar
nuestro servlet. A continuacin, pasaremos a describir el valor de los campos ms
relevantes:
En resumidas cuentas, lo que tenemos que hacer es asignarle al servlet que vamos
a usar para mapear las peticiones web, un nombre y, un paquete donde se hallar la
clase java que queramos utilizar (donde estn nuestro recursos). Estos parmetros
hacen alusin a servlet-name y param-value, respectivamente. Adems, tendremos
que identificar de alguna forma las peticiones web que llegan, para saber qu servlet
recoge la funcionalidad a utilizar. Para ello, asignamos a cada servlet, identificado por su
nombre, un path, de manera que las peticiones web que contengan en su URL el path
especificado, en nuestro caso /rest/*, utilizarn el servlet definido bajo el nombre
RESTWebServiceAndroid, debido a que es el nombre que hemos asignado.
Luego, en este punto, nuestro servlet ya es capaz de asignar las peticiones web
a nuestro servicio web.
Jersey se integra con los siguientes mdulos para proporcionar apoyo a JSON.
Adems, Jersey dispone de tres enfoques bsicos, que enumeraremos, para
proporcionar dicho soporte:
29 https://jersey.java.net/
58
Mdulo
Enfoque MOXy JSON-P Jackson Jettison
1.POJO-based JSON Si No Si no
Binding
2.JAXB-based JSON Si No Si Si
Binding
3.Low-level JSON No Si No Si
parsing & processing
El segundo enfoque tendra sentido en nuestro servicio web si ste tuviera que
consumir/producir ambos tipos de datos, es decir, JSON y XML. Como esto no refleja
ningn caso de uso, lo descartamos.
MOXy
o Es el preferido
Jackson:
o Soporta JSON
Como nuestro objetivo es soportar JSON en nuestro servicio web, no nos vamos a
extender en competencias y nos vamos a quedar con Jackson, como solucin.
Para activar esta funcionalidad, basada en el enfoque que utiliza objetos POJO
para serializar los objetos tipo JSON, necesitaremos activar la caracterstica
Ahora podemos decir que estamos listo para hacer un correcto uso de nuestro servicio
web RESTful.
60
3 SERVICIO WEB DESARROLLADO
3.1 Arquitectura de la aplicacin
Servicio Web
RESTful
Servidor
externo
Nuestra aplicacin Android enva un mensaje HTTP hacia nuestro servicio web,
indicando la URI donde se encuentra el recurso que va a consumir. La peticin
puede ser de dos tipos (GET o POST). Adems, la informacin que transmitamos
podr viajar tanto en un objeto del tipo JSON, como en texto plano.
62
GET: Para consultar y obtener recursos.
Son las direcciones que usar la aplicacin para comunicarse con el servidor y
llevar a cabo una tarea. Las URIs cambian segn la peticin que se quiera realizar en
cada momento, por esta razn se har una clasificacin de los recursos de nuestro
servicio web en funcin del tipo de peticin.
Peticin URIs
/db
/DatosUsuario
/entrenamientolibre
/entrenamientopersonal
/rutinaelegida
/ejercicioelegido
GET /explicacionejercicio
/caracteristicaejercicio
/recomendacionejercicio
/utilelegido
/fotoutil
/musculoelegido
/fotomusculo
/fotos
/listavideos
/newuser
/recoverpass
POST
/login
/configuracin
/moduser
Tabla 3. Clasificacin de URIs segn tipo de peticin HTTP
Estas URIs dotan de funcionalidad a nuestro servicio web. Es por ello que estarn
asignadas a distintos mtodos de nuestra clase principal. Aunque todos estos mtodos
se apoyaran en muchos otros, de manera auxiliar, para completar su fin.
Como podemos ver, hemos agrupado las clases en cuatro paquetes segn la finalidad
que tengan.
Paquete com.josvalbae.rest: Aqu est nuestra clase principal, es decir, todos los
recursos web (mtodos java) que son accesibles mediantes las URIs indicadas
en la tabla anterior.
64
Paquete com.josvalbae.user: Aqu estarn las clases que guardan relacin con el
usuario de la aplicacin Android. Estas clases se utilizan para serializar y
deserializar objetos JSON en objetos Java que contengan la informacin del
usuario, como son todos los campos que intervienen en el registro de un usuario
o los errores que se producen al comprobar si existe alguna entrada en nuestra
base de datos con los mismos datos que nuestro nuevo usuario quiere introducir.
URIs Mtodos
/db CompruebaBD
/DatosUsuario ObtUserData1
/entrenamientolibre EntrenamientoLibre
/entrenamientopersonal EntrenamientoPersonal
/rutinaelegida ListaEjercicios
/ejercicioelegido EligeEjercicios
/explicacionejercicio ExplicacionEjercicio
/caracteristicaejercicio CaracteristicasEjercicio
/recomendacionejercicio RecomendacionesEjercicio
/utilelegido EligeUtil
/fotoutil CargaFotoUtil
/musculoelegido EligeMusculo
/fotomusculo CargaFotoMusculo
/fotos CargaFotos
/listavideos CargaVideos
/newuser createUserInJSON1
/recoverpass SendPass
/login LoginUser
/configuracion Configuracion
/moduser ModifyUserInJSON
66
EligeUtil: Para un ejercicio seleccionado nos devuelve todos los tiles que vamos
a necesitar para ejecutar su desarrollo, como podran ser guantes, mancuernas,
cintas elsticas, etc. Se apoya en las clases Utiles.java y List_Utiles.java para
serializar un objeto java a un JSON array.
CargaFotoUtil: Para un til seleccionado nos devuelve una imagen del mismo
para mostrar al usuario con mayor claridad aquello a lo que no estamos
remitiendo. Se apoya en las clases Utiles.java y List_Utiles.java para serializar un
objeto java a un JSON array.
Cabe destacar que todos estos mtodos de la clase principal se apoyaran en la clase
ConexionBD.java para poder conectarse a nuestra base de datos MySQL.
Para entender cmo procede nuestro servicio ante una peticin GET,
estableceremos un contexto que se definir a continuacin.
DNI
Direccin de correo
Nmero de telfono
Nombre de usuario
68
El servicio web identificar la URI /db con el mtodo CompruebaBD, como se
indica en la Tabla 4. De este modo, el servicio web pasar a ejecutar dicho mtodo, que
realizar las siguientes tareas:
Creacin de una clase que ser devuelta como un objeto tipo JSON que nos
indicar cules campos existen en la base de datos y cules no.
WS BD
@Path(/db)
Obtenemos datos
Buscamos si tenemos algn recurso con
Peticin GET @QueryParam la direccin /db
Creacin de conexin
Respuesta
Respuesta
Cierre de conexin
Respuesta
JSON
Procesamiento de errores
La aplicacin
sigue trabajando
por su cuenta
para realizar el
proceso de
registro mediante
la utilizacin de
otros recursos.
70
3.2.2.2 Peticiones POST
Para entender cmo procede la nuestro servicio ante una peticin POST,
estableceremos un contexto que se definir a continuacin.
Direccin de correo del cliente email que usa nuestro servicio web para el reenvo
de las contraseas.
Procesar la peticin y, extraer los valores del objeto JSON que recibe. Para
ello:
o Tendremos una clase POJO con la misma estructura que el JSON que
recibimos. La asignacin (des-serializacin) entre ambas se har
automticamente.
72
WS BD
@Path(/configuracion)
Obtenemos datos
Buscamos si tenemos algn recurso
Creacin de conexin
Respuesta
Respuesta
Procesamos la respuesta
Cierre de conexin
Respuesta
HTTP texto/plano
En esta seccin se har una breve explicacin del sistema de base de datos que se
emplea y, se mostrar el diagrama relacional de todas nuestras tablas en las base datos,
as como, la relacin que tienen las distintas tablas entre s.
3.3.1 Introduccin
Remitiremos al lector al Captulo III. Seccin 2 Base de datos del proyecto de los
antecedentes37 en cuestin, para que consulte el significado de las tablas que conforman
la base datos, y el uso de claves forneas para relacionarlas entre s. Adems tambin
podr ver cmo se lleva a cabo la creacin de las tablas.
Tambin se mostrar en la Figura 34, la relacin que guardan las distintas tablas y sus
restricciones. Se mostrar tanto la primera como la segunda tabla referenciadas por sus
claves forneas, respectivamente. Y tras esto, se mostrar cmo deben actualizarse los
datos en funcin de los diferentes casos dados.
74
Figura 33. Modelo relacional androidprueba.sql
La tabla configuracin, como hemos dicho, se usa para almacenar aquellos datos
relacionados con las preferencias el sistema que el servicio web necesita conocer, tales
como clientegmail, puertogmail, tokengmail.
76
puertogmail: Puerto que usa Gmail para enviar los correos. En nuestro
caso, usaremos el puerto de SMTP39 para implementar TLS40.
Ya dijimos que todas las imgenes que bamos a emplear estaban en un servidor
de hosting externo, Imgur.
78
4 APLICACIN DEL ENTRENADO. ACCESO AL
SERVICIO
En este captulo nos apoyaremos en el funcionamiento de la aplicacin Android para
explicar el funcionamiento de los diferentes mtodos (o recursos) que hemos
implementado en el servicio web.
Nos apoyaremos en un caso especfico que atienda una peticin HTTP para explicar
un funcionamiento completo de la aplicacin del entrenado, teniendo en cuenta la
intervencin de todas las tecnologas. Para los dems caso de uso, indicaremos de
forma esquemtica los recursos que utiliza.
4.1 Introduccin
o Cliente Gmail, puerto Gmail y token Gmail -> explicdas en 3.3.1 base
de datos
Adems de esto, una vez se accede como usuario registrado o no registrado, se debe
poder:
Acceso rpido a los ejercicios, mediante una lista con solo los videos de los
ejercicios de la rutina a realizar.
Dentro del acceso detallado a cada uno de los ejercicios particulares de los que dispone
cada rutina, el usuario podr:
Poder ver los msculos implicados en el ejercicio, con una descripcin y una
foto de cada uno de ellos. Como puede haber diferentes msculos en cada
ejercicio, estos aparecern en una lista de tamao variable sobra la que podr
seleccionarse el musculo deseado.
Para una mayor compresin, fotos del ejercicio a realizar. Se dispondr de tres
fotos para una mayor claridad, tales como la foto de la posicin inicial del
ejercicio, otra foto con la posicin final y, por ltimo, una foto con un detalle
que el mdico o entrenador ha estimado oportuno resaltar.
80
En las posteriores secciones se proceder a la utilizacin de todos los casos de
uso anteriores para explicar los mtodos implementados en el servicio web. Se har
usando las diferentes activities que tiene nuestra aplicacin y, se acompaar la
explicacin de ilustraciones para facilitar la compresin.
82
1. Autenticarse.
2. Registrarse.
3. Continuar sin registro.
4. Ajustar las preferencias.
5. Recuperar la contrasea.
6. Introducir sus datos para autenticarse.
Gracias a esta pantalla de inicio, organizamos la aplicacin desde el principio,
dependiendo si el usuario est registrado o no, o bien si el usuario quiere registrarse,
entrar sin registro o cambiar las preferencias del sistema.
En la aplicacin, se mostrar un dialogo, como indica la Figura 40. , para indicar que se
est realizando la configuracin.
Mientras est se realiza, se ejecutar en segundo plano un hilo que ser el encargado
de realizar una peticin HTTP hacia nuestro servicio web. De esta peticin, destacamos:
84
Tabla 5. Parmetros peticin /configuracin
Esto produce un objeto JSON con la siguiente estructura, que ser lo que llegar al
servicio web.
Ahora el servicio web procesar esta peticin buscando, como se indic en la Tabla 4,
el mtodo correspondiente a esta URI. Y ejecutar el mtodo correspondiente, como se
muestra a continuacin:
Ahora vamos a ver cmo se des-serializa el objeto JSON que nos mand el cliente. Para
ello mostramos la clase Configuracion.java.
86
Aplicacin del entrenado. acceso al servicio
Vemos que la clase Configuracion.java tiene los mismos campos que el JSON que nos
llega. Gracias a aquello que hablbamos de cmo Jersey soportaba el uso de JSON
basado en clases POJO43, cuando llega el objeto JSON de la Figura 42, Jersey lo des-
serializa a un objeto Java de la clase Configuracion.java, como se muestra a
continuacin:
Ahora mi servicio web podr acceder a estos valores como se muestra en la siguiente
figura:
86
Figura 46. Extraccin de los campos del objeto Java
En caso de que no existan, borraremos la entrada y crearemos otra nueva y nica, como
ya explicamos anteriormente, en la base de datos. Tras esto, comprobaremos que la
hemos creado bien, o no, y prepararemos la respuesta al servicio web.
88
Aplicacin del entrenado. acceso al servicio
Si hay algn error, lo capturaremos con los bloques catch anidados y tambin
informaremos a la aplicacin la naturaleza del error que ha ocurrido. En este caso, solo
usaremos un bloque catch.
Por ltimo, cerraremos la conexin que habamos creado con la base de datos. Para
garantizar que este cierre se produzca siempre, lo enmarcamos en un bloque finally.
88
Servicio
BD
Web
MySQL
http://"+IP_server+"/path-raiz/configuracion
JSON Object:
INSERT INTO
Crea
entrada
en tabla
Respuesta
Respuesta:
- ok
Al pulsar dicho botn, se permite a un usuario registrarse dentro del sistema, para
lo cual tendr que rellenar una serie de campos con la informacin de usuario.
90
Una vez el usuario introduzca todos los valores, pulsar el botn Registrarse y, se
comprobar si que no hay ningn error. Para ello, la peticin HTTP utilizar:
URI = /newuser
Cuando se desea acceder como usuario registrado, lo nico necesario ser que
el usuario introduzca correctamente la dupla usuario-contrasea. Tras la introduccin de
los parmetros, como vemos en la Figura 57, se inicia un proceso de envo de datos al
servidor, donde se comprobar que esta dupla existe en la base de datos. Para ello, la
peticin HTTP, utilizar:
URI = /login
En este caso
92
Figura 57. Login correcto
URI = /recoverpass
94
Figura 60. Enviando contrasea
Entrenar
Panel de control
Cerrar sesin
Una vez cargados los datos, se muestran todos los campos rellenos. El usuario
es libre de modificar aquellos que quiera, teniendo en cuenta que se volvern a
comprobar por si estos cambios (de los campos sensibles) coinciden con algunos ya
existentes en la base de datos y en dicho caso devolver un aviso al usuario. Para ello,
se realiza una peticin HTTP que utilizar:
96
o @QueryParam: Aquellos parmetros sensibles que cambie el
usuario.
Tras la comprobacin, para saber si los nuevos datos son posibles, se enviar una
peticin HTTP que utilizar:
URI = /moduser
JSONObject, con los datos que aparecen en los campos para guardarlos
posteriormente en la base de datos.
4.4 Entrenamiento
Entrenamiento personalizado
Entrenamiento libre
En funcin del botn que pulsemos pasaremos a una actividad u otra, pero antes
necesitaremos descargar todas las rutinas para mostrarlas posteriormente. Por ello, la
peticin HTTP utilizar:
98
o @QueryParam: nombre del usuario
Si el usuario selecciona esta opcin, se cargarn las rutinas que tiene asignadas
en el sistema. stas han sido establecidas por un especialista. La forma en las que estas
rutinas se pueden asignar queda fuera del alcance del proyecto, pudiendo plantearse
como una lnea de continuacin.
Para mostrar las rutinas de usuario, se ha optado por usar listas de tamao
variable, dado que no se desea limitar la cantidad de ejercicios que un usuario pueda
realizar.
Cuando el usuario seleccione una cualquiera pasar a una nueva ventana donde se
le dar la opcin de realizar dos tipos de entrenamiento:
Mediante videos
Paso a paso
100
Aplicacin del entrenado. acceso al servicio
Igual que ocurra anteriormente, tendremos que pedir la informacin al servicio web
al pulsar cualquier botn para poder rellenar la lista con los ejercicios, tras la toma de
decisin. Para ello la peticin HTTP utilizar:
Para dicha rutina el servicio web nos enviar un JSONArray con todos los
ejercicios que la conforman y, lo pasar a la siguiente actividad, 4.4.1.1 o 4.4.4.2, para
que formen su listado correspondiente.
Formar un listado variable con los datos que recibe del men anterior, que
constar de todos los ejercicios que el especialista le haya asignado. Vemos un ejemplo
a continuacin:
100
Figura 66. Listado con los ejercicios en formato video
Formar un listado variable con los datos que recibe del men anterior, que
constar de todos los ejercicios que el especialista le haya asignado. Vemos un ejemplo
a continuacin:
102
Figura 68. Listado ejercicios. Paso a paso
4.4.1.3 Ejercicios
En este apartado se va a ver cada uno de los aspectos que puede tener relacionado
un ejercicio. Recordemos que la informacin que nos llegaba desde la actividad anterior
era la descripcin, la finalidad y la duracin del ejercicio.
Explicacin
104
Figura 70. Explicacin del ejercicio
Caractersticas
Recomendaciones
tiles
106
Msculos
Fotos
108
Figura 75. Acceso usuario no registrado
A este tipo de usuario slo se le permite realizar un entrenamiento por defecto que
hemos asignado manualmente en la base de datos, quedando fuera de uso el tipo de
entrenamiento libre. Para esto asignamos a este usuario desconocido el valor de user0.
110
5 CONCLUSIONES Y LNEAS FUTURAS
Se ha optado por usar un tema que pertenece a la imagen del sistema operativo
de Android para evitar problemas de renderizado de las pantallas, si el tamao del
terminal cambiase.
manera local o en la base de datos MySQL. Para mostrarle grficamente los progresos
alcanzados.
Otra mejora, podra ser un contacto directo con el entrenador, ya sea mediante
algn botn de soporte o contacto, donde el usuario pudiera ponerse en contacto con el
entrenador de manera inmediata, para que ste evaluara algn seguimiento o resolviera
alguna duda planteada.
Como del entrenador no hemos implementado nada, es posible que una posible
lnea de continuacin sea la implementacin sobre un servicio web RESTful la aplicacin
del entrenador. En dicha aplicacin, el entrenador podra establecer las rutinas a sus
clientes, consultar dudas, cambiar ejercicios, asignar nuevos recursos como vdeos o
imgenes, etc. Es decir, un sinfn de opciones para facilitar la labor del entrenador.
5.1.3 General
5.2 Conclusiones
5.2.1 Tcnicas
En primer lugar, ofrece al usuario una mayor libertad de uso tanto al usuario, que
puede practicar los ejercicios en su hogar y en el momento que estime oportuno, como
al especialista (ya sea entrenador o medico), el cual puede realizar un seguimiento del
entrenado sin necesidad de realizar desplazamientos ni estar presente en el momento
del entrenamiento. Esto conlleva una reduccin de costes, pudindose llegar a un mayor
volumen de usuarios, facilitando la rehabilitacin para personas incluso con movilidad
reducida, donde el desplazamiento se vuelve complicado.
112
clasificar de manera personalizada aquellos ejercicios necesarios para confeccionar una
rutina completa, en la que se tiene en cuenta cualquier lesin o patologa del sujeto que
se somete al entrenamiento, ni ms ni menos que de la mano de un profesional.
5.2.2 Personales
En primer lugar, me quedo con el enorme trabajo que hay detrs de un proyecto
final de carrera, donde he tenido que lidiar con muchos conceptos que eran nuevos para
m y que no haba visto a lo largo de la formacin que he recibido. Tanto Android como
los servicios web, eran unos completos desconocidos que pasaron a ser protagonistas
de mi proyecto final de carrera. Algo de lo que me alegro, pues este hecho es lo que ha
supuesto ver el proyecto como un reto a superar.
114
6 BIBLIOGRAFA
1. Leonard Richardson, Sam Ruby. RESTful Web Services, s.l.: OREILLY, 2007.
2. David Gourley and Brian Totty. HTTP: The Definitive Guide, s.l.: OREILLY, 2002
3. Subbu Allamaraju. RESTful Web Services Cookbook, s.l.: OREILLY, 2010.
4. Ramn Invarato Menndez. Android 100%. Versin 1.
5. Antonio Jos Daz Lora. Aplicacin Android para la rehabilitacin fsica de usuario usando
MySQL, PHP y codificacin JSON. Escuela Superior Tcnica de Ingenieros. Ao 2014.
6. Salvador Gmez Oliver. Curso Programacin Android. Versin 2.0, Noviembre 2011.
7. Friesen, Jeff. Learn Java for Android Development.
8. Cinar, Onur. Android apps with Eclipse.
9. Cadenhead, Rogers. Sams teach yourself Java in 21 days.
10. Michael Kofler. MySQL.
11. Laurie, Ben. Apache: The definitive guide.
12. Tanuj Khare. Apache Tomcat 7 essentials: learn Apache Tomcat 7 step-by-step through a
practical approach, achieving a wide visin of Enterprise middleware along with building your
own middleware servers, and administrating.
13. Shah, Sanja; Khirulnizam Abd Rahman. Android development tools for Eclipse: set up,
build, and publish Android projects quickly using Android development tools for Eclipse.
14. Prochon, Sbatien. Android: gua de desarrollo de aplicaciones para smartphones y tabletas.
15. Tutorial JSON. [En lnea].
16. Principios de REST. [En lnea]. http://dmsysperu.blogspot.es/1402810912/principios-del-
rest/
17. Jersey. RESTful Web Services in Java. [En lnea]. https://jersey.java.net/
18. REST y Web Services. [En lnea].
http://users.dsic.upv.es/~rnavarro/NewWeb/docs/RestVsWebServices.pdf
19. REST with Java (JAX-RS) using Jersey Tutorial. [En lnea].
http://www.vogella.com/tutorials/REST/article.html
20. RESTful Web Service Developers Guide. ORACLE. [En lnea].
http://docs.oracle.com/cd/E19776-01/820-4867/index.html
21. Sending email via Gmail SMTP. [En lnea]. http://www.mkyong.com/java/javamail-api-
sending-email-via-gmail-smtp-example/
22. Tutorial sobre JSON. ORACLE. [En lnea].
http://www.oracle.com/technetwork/es/articles/java/api-java-para-json-2251318-esa.html
116
116
ANEXO A: IMPACTO DE LA APLICACIN
1. Introduccin
Se har una descripcin de las ventajas aportadas tanto al mbito del usuario como al
mbito del entrenador, mdico o fisioterapeuta.
2. Descripcin
2.1 mbito de usuario
Vamos a empezar recabando, de mano de diferentes fuentes, grficas con una serie
de estadsticas que despus veremos que hacen de Espaa un lugar propicio para la
insercin de nuestro proyecto.
En la actualidad, gran parte de la poblacin tiene acceso a las nuevas tecnologas. Este
abanico de edades aglomera, desde los ms jvenes hasta las personas con una edad
comprendida por encima de las cincuenta y cinco aos. En especial en Espaa, siendo
el segundo pas de la UE que ms usa el smartphone, con nada menos que un 72% de
la poblacin, como muestra la siguiente ilustracin.
Otra estadstica que no deja a nadie indiferente es, que cada espaol tiene en promedio
2,9 dispositivos conectados a internet. Es decir, podramos pensar que se ha instaurado
casi definitivamente el combo ordenador, tablet y mvil en la sociedad espaola.
Pero esto no es todo, an tenemos ms estadsticas que avalen nuestro proyecto. Segn
el INE, la tasa de penetracin de smartphones en Espaa segn las edades viene
reflejada por el siguiente grfico.
118
Uso smartphone en Espaa, segn edades
25% 23% 23%
21%
20%
16%
15%
11%
10%
6%
5%
0%
Porcentaje de personas
13-17 aos 18-24 aos 25-34 aos 35-44 aos 45-54 aos Ms de 55 aos
Figura 78. Grfico de barras de uso del smartphone segn la edad. Espaa 2013(INE)
Gracias a que la utilizacin del mvil se realiza a todas las edades y que, cada vez, tiene
una mayor penetracin de mercado, todos nos podemos beneficiar del uso de esta
aplicacin deportiva.
Analizamos ahora a la poblacin joven, quien puede que no necesite de estos servicios,
pero tambin es cierto que pueden necesitarlo en caso de lesin, ya que estn expuestos
a actividades de mayor estrs muscular como pueden ser los gimnasios. Dentro de este
grupo, el 34% va desde los 25 aos hasta los 34 aos, siendo esta poblacin activa la
que algunas veces por falta de tiempo, por desplazamiento o bien por comodidad, no
pueden realizar un entrenamiento fsico como les gustara. Estos motivos tambin han
sido tenidos en cuenta para el desarrollo de la aplicacin, ya que podran realizar ejercicio
desde casa una vez el entrenador personal les haya asignado una rutina de
entrenamiento. De igual forma, el usuario entrenado estara accediendo a unos servicios
de entrenamiento personalizados con menor coste y mayor atencin, dado que el
entrenador podra abarcar a un mayor nmero de usuarios que le sera imposible si
tuviera que ir al domicilio de cada uno de sus clientes.
A pesar de que nuestra aplicacin Android est destinada al usuario final, es decir, a
la persona que va a ser entrenado o rehabilitada de una dolencia, a continuacin se
exponen los beneficios que pueden sacar el mdico o entrenador de una aplicacin como
sta.
120
Aunque la grfica que usemos est referenciada al ao 2013, sigue siendo igual de vlida
a fecha actual, conclusin a la que llegaremos al final de este punto.
Veamos, pues, la compras realizadas por Internet que realizaron los espaoles en el
ltimo ao, mostrada en el siguiente grfico.
28% 29%
30%
25%
20% 18%
15%
15%
10% 8%
5% 2%
0%
Porcentaje de personas
13-17 aos 18-24 aos 25-34 aos 35-44 aos 45-54 aos Ms de 55 aos
Figura 79. Grfica de personas (%) que compraron por internet en los ltimos 12 meses. Ao 2013
Segn el diagrama de barras, vemos que en todos los grupos, uno de cada cinco
espaoles compra por Internet (a excepcin del sector de la tercera edad menos
relacionado con las nuevas tecnologas debido a su poca experiencia con las mismas),
llegndose en algunos sectores de las edades casi al 30%. Adems, cada vez son ms
las personas que prefieren hacer sus compras por Internet o a travs del mvil debido a
la comodidad que ofrece, siendo sta una tendencia creciente en los aos venideros,
como ilustraremos al final del presente punto.
De este modo, es factible crear una aplicacin que tenga un pequeo coste para el
cliente, el cual pueda realizar pagos peridicos al mdico o entrenador a cambio de
recibir sesiones de entrenamiento o recuperacin personalizadas segn las necesidades
del usuario.
Figura 80. Evolucin del uso de TIC por las personas de 16 a 74 aos. 2006 -2014
Podemos concluir que no nos faltan motivos para pensar que nuestro sistema de pago no
ser un obstculo para la sociedad espaola.
Desde el punto de vista del profesional, tan solo tenemos que hacer una bsqueda en
internet y veremos que son muchos los fisioterapeutas o entrenadores personales que
ofrecen sus servicios mediante anuncios. A esto hay que sumarle, una vez ms, la
problemtica de la movilidad y las cancelaciones de las citas a las que estn expuestos,
minimizando el nmero de usuarios que pueden llegar a atender.
Como broche para cerrar este punto, planteo al lector como reflexin, si no ha notado
que cada vez ms, el deporte est tomando un aspecto ms predominante frente al
sedentarismo que le haba sumido en el ms profundo olvido de las sociedades
modernas. Los gimnasios cada vez se vuelven ms competitivos entre s, lanzando
mejores ofertas, bonos e innumerables descuentos, sin olvidar los servicios de
fisioterapia o incluso nutricin deportiva que ofrecen. Adems de tener stos un carcter
gratuito, como por ejemplo, sesiones de electro estimulacin con el fin de captar a esta
poblacin que busca esa caracterstica diferenciadora en el mercado relacionada con el
deporte, y que nuestra aplicacin posee, la autonoma de realizar el ejercicio y/o
122
recuperacin de manera autnoma, a un precio inferior, desvinculado de todo horario y
soportado por una calidad apoyada en la opinin de los mejores profesionales.
124
Anexo A: Impacto de la aplicacin
124
ANEXO B: ESTUDIO CUOTA DE MERCADO
1. Introduccin
Los ltimos datos de diferentes consultoras han permitido conocer la evolucin de las
plataformas mviles en estos ltimos meses. Y como se esperaba, el protagonismo de
Android en nuestro pas es absoluto.
86,7
Figura 81. Cuota de mercado de los diferentes sistemas operativos mviles en Espaa. Enero 2015
80
70
60
50
40
30
20
10,4
7,3 5,5
10 2,5 0,9
0
Android iOS Windows Otros
Lo que ms llama la atencin, no es que Android este entorno al 86%, es que hay una
tendencia de crecimiento positiva. A pesar de que esta tendencia de crecimiento pueda
tener pendiente negativa en ciertos periodos especficos (por ejemplo, en Navidad se
experiment un leve crecimiento de iOS proporcional a la prdida de Android), el
resultado del estudio anual no deja lugar a dudas: Android sigue siendo el lder del
mercado, al menos, en Espaa.
Debido al impacto tan elevado que tiene Android en el mercado actual, se ha optado por
realizar el proyecto en Android para tener una mayor aceptacin en el mercado.
44 http://www.kantarworldpanel.com/es
126
ANEXO C: CREAR PROYECTO WEB
Introduccin
En este anexo, se explicar dos formas de desplegar un servicio web RESTful, usando
eclipse. stas son:
2. Proyecto Maven
Lo primero que haremos ser indicar al lector cual ha sido nuestro entorno de trabajo.
Eclipse Mars.
Apache Tomcat 7.
JDK 1.8.
4. Finish.
5. Borramos index.jsp, debido a que no nos hace falta y puede dar error en algunas
versiones de eclipse.
i. Servidor.
ii. Servlets.
iii. Core.
128
Figura 84. Jerarqua de carpetas
130
Anexo C: Crear proyecto web
130
3. Proyecto web dinmico
132
ANEXO D: MANUAL DE INSTALACIN
En este anexo se presentar una gua de instalacin de todas las herramientas
que han sido utilizadas para la realizacin de este proyecto fin de carrera. A continuacin
hacemos un breve sumario de todas ellas:
XAMPP
Eclipse Mars
Java (JDK)
Android (SDK)
1. Instalacin de XAMPP
134
Ahora, solo nos queda esperar que se ejecute el proceso de instalacin.
Pulsamos Next.
136
Pulsamos Next.
138
Como podemos observar, tan solo nos aparecen habilitadas las opciones que hemos
elegido en el proceso de instalacin. En nuestro caso, el servidor Apache y el servidor
MySQL. Ambos pueden ser iniciados pulsando el botn Start y tras esto, tambin
pueden ser configurados si pulsamos sobre Admin.
2. Instalacin de Eclipse
140
Figura 105. Directorio de Eclipse
3. Instalacin de JDK
142
Figura 108. Seleccin de la versin del JDK
Pulsamos Next.
144
Figura 111. Asistente de instalacin. Paso 1
Pulsamos Next.
146
4. Instalacin de Android SDK
Si queremos desarrollar una aplicacin Android, nos har falta una herramienta de
desarrollo para realizar esta tarea. sta es el Android SDK. Para su descarga, iremos a
la siguiente direccin web: https://developer.android.com/sdk/installing/index.html
148
Pulsamos Next.
Pulsamos Next.
Nos aparecen dos opciones donde podemos elegir si queremos instalar el programa para
todos los usuarios del ordenador o no. Elegimos una de las dos y pulsamos Next.
150
Figura 122. Asistente de instalacin Android SDK. Paso 5
En este punto, el asistente nos da la opcin de crear un acceso directo. Tomamos una
decisin y pulsamos Install.
152
Figura 125. Vinculacin Android SDK y Eclipse. Paso 1
Tras esto, hemos finalizado la vinculacin de las dos herramientas necesarias para el
desarrollo de nuestra aplicacin Android en Eclipse. Reiniciamos Eclipse.
154
Anexo D: Manual de instalacin
Nos descargamos el fichero .zip del servidor apache tomcat de la siguiente direccin:
http://httpd.apache.org/download.cgi y lo descomprimimos en nuestro directorio C: (por
comodidad, pues es donde tenemos tambin descomprimidas las carpetas de eclipse).
En este punto, solo nos queda aadirlo a Eclipse. Con este abierto y sobre la barra de
herramientas pulsamos Windows > Preferences > Server > Runtime Environment .
154
Figura 128. Adicin del servidor Apache Tomcat a Eclipse. Paso 2
156
ANEXO E: CDIGOS JAVA Y XML DE LA
APLICACIN ANDROID
En este anexo se encuentran todos los cdigos java y xml usados en el desarrollo
de la aplicacin Android. Como bien es sabido, Android usa familias donde el cdigo
XML es usado para indicar la apariencia grfica de la pantalla a mostrar, mientras que el
cdigo java aporta la lgica para poder realizar todas las operaciones de la actividad en
la cual nos encontremos.
1. Familia MainActivity
1.1 MainActivity.java
158
Anexo E: Cdigos Java y XML de la aplicacin Android
158
160
Anexo E: Cdigos Java y XML de la aplicacin Android
160
162
Anexo E: Cdigos Java y XML de la aplicacin Android
162
1.2 activitymain.xml
164
Anexo E: Cdigos Java y XML de la aplicacin Android
164
Familia HiScreen
2.1 HiScreen.java
166
Anexo E: Cdigos Java y XML de la aplicacin Android
166
168
Anexo E: Cdigos Java y XML de la aplicacin Android
2.2 hiscreen.xml
168
170
Anexo E: Cdigos Java y XML de la aplicacin Android
3. Familia RegScreen
3.1 RegScreen.java
170
172
Anexo E: Cdigos Java y XML de la aplicacin Android
172
174
Anexo E: Cdigos Java y XML de la aplicacin Android
174
3.2 regscreen.xml
176
Anexo E: Cdigos Java y XML de la aplicacin Android
176
4. Familia NoRegscreen
4.1 NoRegscreen.java
178
Anexo E: Cdigos Java y XML de la aplicacin Android
4.2 noregscreen.xml
178
5. Familia Forgetscreen
5.1 Forgetscreen.java
180
Anexo E: Cdigos Java y XML de la aplicacin Android
180
182
Anexo E: Cdigos Java y XML de la aplicacin Android
5.2 forgetscreen.xml
182
6. Familia Preferencias
6.1 Preferencias.java
184
Anexo E: Cdigos Java y XML de la aplicacin Android
184
186
Anexo E: Cdigos Java y XML de la aplicacin Android
6.2 preferencias.xml
186
7. Familia WelcomReg
7.1 WelcomReg.java
188
Anexo E: Cdigos Java y XML de la aplicacin Android
188
190
Anexo E: Cdigos Java y XML de la aplicacin Android
7.2 welcomreg.xml
190
8. Familia WelcomNoReg
8.1 WelcomNoReg.java
192
Anexo E: Cdigos Java y XML de la aplicacin Android
192
194
Anexo E: Cdigos Java y XML de la aplicacin Android
8.2 welcomnoreg.xml
194
9. Familia Modify
9.1 Modify.java
196
Anexo E: Cdigos Java y XML de la aplicacin Android
196
198
Anexo E: Cdigos Java y XML de la aplicacin Android
198
200
Anexo E: Cdigos Java y XML de la aplicacin Android
200
9.2 modify.xml
202
Anexo E: Cdigos Java y XML de la aplicacin Android
202
10. Familia ListaActivity
10.1 ListaActivity.java
204
Anexo E: Cdigos Java y XML de la aplicacin Android
204
10.2 listaactivity.xml
Realmente ListaActivity no tiene un XML como el resto de las familias, sino que el suyo
se compone de un par de XML, especificados a continuacin:
entrada.xml: Sern cada uno de los elementos de los que dispone la lista.
206
Anexo E: Cdigos Java y XML de la aplicacin Android
10.2.1 listado.xml
10.2.2 entrada.xml
206
208
Anexo E: Cdigos Java y XML de la aplicacin Android
208
210
Anexo E: Cdigos Java y XML de la aplicacin Android
210
212
Anexo E: Cdigos Java y XML de la aplicacin Android
212
11.2 welcom2start.xml
214
Anexo E: Cdigos Java y XML de la aplicacin Android
214
216
Anexo E: Cdigos Java y XML de la aplicacin Android
216
218
Anexo E: Cdigos Java y XML de la aplicacin Android
12.2 lista_video.xml
entrada6.xml: Ser cada uno de los elementos de los que dispone la lista.
12.2.1 listado.xml
218
12.2.2 entrada6.xml
220
Anexo E: Cdigos Java y XML de la aplicacin Android
220
13. Familia Video
13.1 Video.java
13.2 video.xml
222
Anexo E: Cdigos Java y XML de la aplicacin Android
222
224
Anexo E: Cdigos Java y XML de la aplicacin Android
224
226
Anexo E: Cdigos Java y XML de la aplicacin Android
14.2 lista_ejercicios.xml
entrada2.xml: Sern cada uno de los elementos de los que dispone la lista.
226
14.2.1 listado.xml
14.2.2 entrada2.xml
228
Anexo E: Cdigos Java y XML de la aplicacin Android
228
15. Familia Ejercicio
15.1 Ejercicio.java
230
Anexo E: Cdigos Java y XML de la aplicacin Android
230
232
Anexo E: Cdigos Java y XML de la aplicacin Android
232
234
Anexo E: Cdigos Java y XML de la aplicacin Android
234
236
Anexo E: Cdigos Java y XML de la aplicacin Android
236
238
Anexo E: Cdigos Java y XML de la aplicacin Android
238
240
Anexo E: Cdigos Java y XML de la aplicacin Android
15.2 ejercicio.xml
240
242
Anexo E: Cdigos Java y XML de la aplicacin Android
242
244
Anexo E: Cdigos Java y XML de la aplicacin Android
244
16.2 informacion.xml
246
Anexo E: Cdigos Java y XML de la aplicacin Android
246
248
Anexo E: Cdigos Java y XML de la aplicacin Android
248
250
Anexo E: Cdigos Java y XML de la aplicacin Android
17.2 lista_util.xml
Al igual que en ListaActivity, Lista_util no tiene un XML como el resto de familias, sino
que el suyo se compone de un par de XML, especificados a continuacin:
250
entrada3.xml: Sern cada uno de los elementos de los que dispone la lista.
17.2.1 listado.xml
17.2.2 entrada3.xml
252
Anexo E: Cdigos Java y XML de la aplicacin Android
252
18. Familia Fotoutil
18.1 Fotoutil.java
254
Anexo E: Cdigos Java y XML de la aplicacin Android
18.2 fotoutil.xml
254
19. Familia Lista_musculo
19.1 Lista_musculo.java
256
Anexo E: Cdigos Java y XML de la aplicacin Android
256
258
Anexo E: Cdigos Java y XML de la aplicacin Android
258
19.2 lista_musculo.xml
entrada4.xml: Sern cada uno de los elementos de los que dispone la lista.
19.2.1 listado.xml
19.2.2 entrada4.xml
260
262
Anexo E: Cdigos Java y XML de la aplicacin Android
262
20.2 fotomusculo.xml
264
Anexo E: Cdigos Java y XML de la aplicacin Android
264
21.2 fotos.xml
266
Anexo E: Cdigos Java y XML de la aplicacin Android
266
22. AndroidManifest.xml
268
Anexo E: Cdigos Java y XML de la aplicacin Android
268
23. string.xml
270
Anexo E: Cdigos Java y XML de la aplicacin Android
270
272
Anexo F: Cdigos Java del WS
com.josvalbae.db
o ConexionBD.java
o Ejercicios.java
o List_Ejercicios.java
o Musculos.java
o List_Musculos.java
o Rutinas.java
o List_Rutinas.java
o Utiles.java
o List_Utiles.java
o Recursos.java
o List_Recursos.java
com.josvalbae.rest
o PrincipalWS.java
com.josvalbae.mail
o SendMail.java
272
o GetSystemPreferences.java
com.josvalbae.user
o UsuarioDB.java
o ECheckData.java
o Configuracion.java
Por otro lado, mostramos los ficheros XML que nuestro proyecto Maven necesita:
pom.xml
web.xml
1. Paquete com.josvalbae.db
1.1 ConexionBD.java
274
Anexo F: Cdigos Java del WS
274
1.2 Ejercicios.java
276
Anexo F: Cdigos Java del WS
1.3 List_Ejercicios.java
276
1.4 Musculos.java
278
Anexo F: Cdigos Java del WS
1.5 List_Musculos.java
1.6 Rutinas.java
278
1.7 List_Rutinas.java
280
Anexo F: Cdigos Java del WS
1.8 Utiles.java
280
1.9 List_Utiles.java
1.10 Recursos.java
282
Anexo F: Cdigos Java del WS
1.11 List_Recursos.java
2. Paquete com.josvalbae.rest
2.1 PrincipalWS.java
282
284
Anexo F: Cdigos Java del WS
284
286
Anexo F: Cdigos Java del WS
286
288
Anexo F: Cdigos Java del WS
288
290
Anexo F: Cdigos Java del WS
290
292
Anexo F: Cdigos Java del WS
292
294
Anexo F: Cdigos Java del WS
294
296
Anexo F: Cdigos Java del WS
296
298
Anexo F: Cdigos Java del WS
3. Paquete com.josvalbae.mail
3.1 SendMail.java
298
3.2 GetSystemPreferences.java
300
Anexo F: Cdigos Java del WS
300
4. Paquete com.josvalbae.user
4.1 UsuarioDB.java
302
Anexo F: Cdigos Java del WS
302
4.2 Configuracion.java
304
Anexo F: Cdigos Java del WS
4.3 ECheckData.java
304
5. Ficheros XML
5.1 pom.xml
306
Anexo F: Cdigos Java del WS
5.2 web.xml
306