Вы находитесь на странице: 1из 307

Proyecto Fin de Carrera

Ingeniera de Telecomunicacin

Desarrollo de Servicio Web RESTful para el Acceso


a Base de Datos de Entrenamiento desde Android

Autor: Jos Mara Valverde Baena


Tutora: Mara Teresa Ariza Gmez

Equation Chapter 1 Section 1

Departamento de Ingeniera Telemtica


Escuela Tcnica Superior de Ingeniera
Universidad de Sevilla
Sevilla, 2015
2 ndice de Tablas
Proyecto Fin de Carrera
Ingeniera de Telecomunicacin

Desarrollo de Servicio Web RESTful para el Acceso


a Base de Datos de Entrenamiento desde Android

Autor:
Jos Mara Valverde Baena

Tutora:
Mara Teresa Ariza Gmez
Profesora titular

Departamento de Ingeniera Telemtica


Escuela Tcnica Superior de Ingeniera
Universidad de Sevilla
Sevilla, 2015
4 ndice de Tablas
Proyecto Fin de Carrera: Desarrollo de Servicio Web RESTful para el Acceso a Base de Datos de
Entrenamiento desde Android

Autor: Jos Mara Valverde Baena

Tutora: Mara Teresa Ariza Gmez

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificacin de:

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.

Jos Mara Valverde Baena


Sevilla, 2015
10 ndice de Tablas
ndice

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

Tabla 1. Sumario de las anotaciones JAX-RS extradas del tutorial JAVA EE 6 56


Tabla 2. Posibilidades de soportar el uso de JSON 59
Tabla 3. Clasificacin de URIs segn tipo de peticin HTTP 63
Tabla 4. Relacin entre URIs y mtodos java 65
Tabla 5. Parmetros peticin /configuracin 85
16 ndice de Tablas
NDICE DE FIGURAS

Figura 1. Comportamiento general de las aplicaciones deportivas 23


Figura 2. Comparativa XML frente a JSON 26
Figura 3. Entrenamiento sin y con aplicacin 28
Figura 4. Comportamiento de nuestra aplicacin deportiva 29
Figura 5. Arquitectura y tecnologas usadas en el servicio 31
Figura 6. Esquema bsico de funcionamiento del proyecto 35
Figura 7. Logo Android 36
Figura 8. Logo JSON 37
Figura 9. Estructura de un objeto JSON 37
Figura 10. Logo Eclipse 38
Figura 11. Estructura proyecto Android en Eclipse 39
Figura 12. Estructura de un artefacto Maven 42
Figura 13. Estructura del pom.xml de un artefacto Maven 43
Figura 14. Estructura del web.xml de un artefacto Maven 44
Figura 15. Panel de control de XAMPP 45
Figura 16. Logo Advanced REST client 45
Figura 17. Logo wireshark 47
Figura 18. Wireshark analizando nuestra interfaz de red 47
Figura 19. Filtrado de peticiones GET/POST en wireshark 47
Figura 20. Logo Notepad++ 48
Figura 21. Logo Imgur 48
Figura 22. Editor online de imgenes ofrecido por imgur.com 49
Figura 23. Formatos disponibles para nuestra imagen 50
Figura 24. Logo Jersey 56
Figura 25. Fichero web.xml de un artefacto Maven 57
Figura 26. Configuracin servlet para soportar enfoque POJO 60
Figura 27. Importacin de dependencias de Jackson 60
Figura 28. Arquitectura y tecnologas usadas en el servicio 61
Figura 29. Agrupacin de clases java de nuestro servicio web 64
Figura 30. Diagrama de secuencia. Peticin GET 70
Figura 31. Ajustes de las preferencias del sistema 72
Figura 32. Diagrama de secuencia. Peticin POST 73
Figura 33. Modelo relacional androidprueba.sql 75
Figura 34. Tabla de relaciones claves forneas 75
Figura 35. Tabla configuracion 76
18 ndice de Figuras
Figura 36. Directorio de almacenamiento de videos 77
Figura 37. Inicio de aplicacin. IP incorrecta 82
Figura 38. Inicio de aplicacin 82
Figura 39. Pantalla de ajuste de preferencias 84
Figura 40. Configuracin del sistema 84
Figura 41. Envio de peticin desde la aplicacin Android 85
Figura 42. JSON que recibe el servicio web 85
Figura 43. Mtodo que el servicio web ejecutar 85
Figura 44. Clase Configuracion.java 86
Figura 45. Objeto Java, tras des-serializacin 86
Figura 46. Extraccin de los campos del objeto Java 87
Figura 47. Mtodo Configuracin (I) 87
Figura 48. Mtodo Configuracin (II) 87
Figura 49. Mtodo Configuracin (III) 88
Figura 50. Mtodo Configuracin (IV) 88
Figura 51. Mtodo Configuracin (V) 88
Figura 52. Configuracin de las preferencias del sistema. Ejemplo 89
Figura 53. Men registro 90
Figura 54. Registro con DNI existente 91
Figura 55. Registro con xito 91
Figura 56. Introduccin parmetros Login 92
Figura 57. Login correcto 93
Figura 58. Error login 93
Figura 59. Envo de contrasea 94
Figura 60. Enviando contrasea 95
Figura 61. Pantalla de bienvenida usuario registrado 96
Figura 62. Datos modificados con xito 97
Figura 63. Eleccin tipo de entrenamiento 98
Figura 64. Lista de rutinas 99
Figura 65. Eleccin en el tipo de entrenamiento a realizar 100
Figura 66. Listado con los ejercicios en formato video 101
Figura 67. Video explicativo de un ejercicio 102
Figura 68. Listado ejercicios. Paso a paso 103
Figura 69. Ejercicio 104
Figura 70. Explicacin del ejercicio 105
Figura 71. Lista de tiles 106
Figura 72. Foto de til 106
Figura 73. Foto del msculo cargado 107
Figura 74. Carga de tres fotos para mayor compresin 108
Figura 75. Acceso usuario no registrado 109
Figura 76. Porcentaje de la poblacin total que usa el smartphone. Ao 2014 117
Figura 77. Nmero medio de dispositivos conectados. Ao 2014 118
Figura 78. Grfico de barras de uso del smartphone segn la edad. Espaa 2013(INE) 119
Figura 79. Grfica de personas (%) que compraron por internet en los ltimos 12 meses. Ao 2013 121
Figura 80. Evolucin del uso de TIC por las personas de 16 a 74 aos. 2006 -2014 122
Figura 81. Cuota de mercado de los diferentes sistemas operativos mviles en Espaa. Enero 2015 125
Figura 82. Cuota de mercado segn SO en Espaa (%) 126
Figura 83. Estructura final de un proyecto Maven 127
Figura 84. Jerarqua de carpetas 129
Figura 85. Configuracin pom.xml 130
Figura 86. Configuracin pom.xml (2) 130
Figura 87. Configuracin web.xml 130
Figura 88. Configuracion web.xml (2) 131
Figura 89. Formato de la direccin de nuestro servicio web 132
Figura 90. Seleccin de la versin de XAMPP 133
Figura 91. Descarga de XAMPP 134
Figura 92. Instalador de XAMPP 134
Figura 93. Instalacin de XAMPP. Paso 1 135
Figura 94. Instalacin de XAMPP. Paso 2 135
Figura 95. Instalacin de XAMPP. Paso 3 136
Figura 96. Instalacin de XAMPP. Paso 4 136
Figura 97. Instalacin de XAMPP. Paso 5 137
Figura 98. Instalacin de XAMPP. Paso 6 137
Figura 99. Instalacin de XAMPP. Paso 7 138
Figura 100. Inicializacin de XAMPP 138
Figura 101. Seleccin de la versin de Eclipse 139
Figura 102. Seleccin de enlace de descarga de Eclipse 139
Figura 103. Inicio de la descarga de Eclipse 140
Figura 104. Descarga de Eclipse 140
Figura 105. Directorio de Eclipse 141
Figura 106. Error en Eclipse al no tener JDK instalado 141
Figura 107. Instalacin del JDK 142
Figura 108. Seleccin de la versin del JDK 143
Figura 109. JDK descargado 144
Figura 110. Asistente de instalacin 144
Figura 111. Asistente de instalacin. Paso 1 145
Figura 112. Asistente de instalacin. Paso 2 145
Figura 113. Asistente de instalacin. Paso 3 146
Figura 114. Asistente de instalacin. Paso 4 146
Figura 115. Android SDK 147
20 ndice de Figuras
Figura 116. Eleccin de la plataforma correspondiente 147
Figura 117. Trminos y condiciones sujetas a la descarga 148
Figura 118. Asistente de instalacin Android SDK. Paso 1 148
Figura 119. Asistente de instalacin Android SDK. Paso 2 149
Figura 120. Asistente de instalacin Android SDK. Paso 3 149
Figura 121. Asistente de instalacin Android SDK. Paso 4 150
Figura 122. Asistente de instalacin Android SDK. Paso 5 151
Figura 123. Asistente de instalacin Android SDK. Paso 6 151
Figura 124. Asistente de instalacin Android SDK. Paso 7 152
Figura 125. Vinculacin Android SDK y Eclipse. Paso 1 153
Figura 126. Vinculacin Android SDK y Eclipse. Paso 2 153
Figura 127. Adicin del servidor Apache Tomcat a Eclipse. Paso 1 154
Figura 128. Adicin del servidor Apache Tomcat a Eclipse. Paso 2 155
Figura 129. Adicin del Servidor Apache Tomcat a Eclipse. Paso 3 156
Caminante, son tus huellas
el camino y nada ms;
Caminante, no hay camino,
se hace camino al andar.
Al andar se hace el camino,
y al volver la vista atrs
se ve la senda que nunca
se ha de volver a pisar.
Caminante no hay camino
sino estelas en la mar.

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

El contexto en el que nos situamos es el denominado entrenamiento a distancia. ste


se define como la prctica de permitir el entrenamiento fsico de una persona, la cual por
diferentes motivos no puede desplazarse hasta un lugar donde desarrollar una actividad
fsica dirigida por un profesional.

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.

1.1.1 Presentacin del problema

Actualmente, podemos afirmar que la gran mayora de las aplicaciones deportivas


que nos encontramos son totalmente desasistidas, es decir, son aplicaciones que no
tienen en cuenta aspectos como lesiones o dolencias de la persona que realiza la
recuperacin o entrenamiento.

Base de
Internet datos

Figura 1. Comportamiento general de las aplicaciones deportivas


24
1 Introduccin

El entrenado hace ejercicios sin saber si lo que est realizando es correcto, incluso

no es consciente de saber si aquello que realiza puede ser contraproducente para su

recuperacin personal, pudiendo acarrearle un perjuicio an ms grave en el futuro.

Con en la Figura 1, tratamos de explicar el problema que presentan, de manera

generalizada, las aplicaciones deportivas actuales. En la figura, aparecen dos usuarios,

llamados Usuario 1 y Usuario 2. El Usuario 1 no padece ningn tipo de dolencia, pero

el Usuario 2 padece algn tipo de lumbalgia. Ambos seleccionan una rutina para el

fortalecimiento de glteos y piernas, llamada Rutina 3. El Usuario 1 desarrollar la rutina,

si todo va bien, sin ningn tipo de incidencia. En cambio, el Usuario 2 la desarrollar y,

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

ir sufriendo una sobrecarga muscular y el usuario se lesionar.

Por otro lado, un detalle que nos llama la atencin es, que prcticamente la totalidad

de las aplicaciones estn dedicadas a ejercicios de gimnasio, relacionados con la fuerza,

no dando cabida a la recuperacin de msculos o articulaciones, ni siquiera incluyendo un

apartado de estiramientos. Adems de los estiramientos, la gran mayora de ejercicios que

aparecen en las diversas aplicaciones son pobres, en cuanto a lo que en su descripcin se

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.

Se ha realizado un anexo1, en el cul, se hace un estudio real del impacto que


llegara a tener nuestra aplicacin.

1 Anexo A: Impacto de la aplicacin

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

Comenzamos mencionando los antecedentes que han sentado la base de este


proyecto. En nuestro caso, es un proyecto desarrollado en la Escuela Superior de
Ingenieros de Sevilla (ESI). ste, es llevado a cabo por Antonio Jos Daz Lora.

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.

Nosotros, proponemos como alternativa el despliegue de un servicio web para que


realice todas estas labores de comunicacin entre la aplicacin y la base de datos.

Por ahora no entraremos en detalle de la tecnologa que implementa nuestro


servicio web, ni las alteraciones que este servicio web produce al resto de los
componentes del sistema, ya que se explicar en el captulo correspondiente2.

1.2.2 Otras referencias

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

2 Captulo 3. Servicio web desarrollado


3 Desarrollo de Aplicaciones para la Plataforma Android. Un caso de estudio para el intercambio de libros.
26
1 Introduccin

Telecomunicacin. El autor de este proyecto es, Francisco Alarcn Barcel, y ste, se


centra en un caso de estudio de intercambio de ficheros.

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:

Para datos pequeos:


o Anlisis de datos JSON ms rpido que anlisis de datos XML.
Para datos grandes:
o Anlisis de datos XML ms rpido que anlisis de datos JSON.
El tiempo de carga es ms rpido con JSON.
El tamao de los objetos JSON es menor.

En la siguiente ilustracin mostraremos de manera visual aquello que se ha dicho, con


una grfica obtenida del propio proyecto.

Figura 2. Comparativa XML frente a JSON

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:

Al tener menor tamao, pesa menos y por tanto se transmite antes.

Los datos que vamos a intercambiar son pequeos. (Sin los datos fueran
grandes, lo ptimo sera usar XML.)

1.3 Descripcin de la solucin

En este apartado, se describen los objetivos principales de nuestra solucin, dando


una idea global del funcionamiento que esperamos obtener y haciendo una pequea
introduccin a las tecnologas que sern utilizadas, las cuales sern descritas en mayor
profundidad en el captulo correspondiente5.

1.3.1 Objetivos

El objetivo de nuestra solucin es facilitar a los usuarios la posibilidad de realizar


un entrenamiento remoto en el momento y lugar que deseen de manera autnoma, sin
necesidad de tener la asistencia de un profesional en el momento de uso, debido a que
los ejercicios han sido previamente asignados por un mdico o fisioterapeuta.

Podemos ver la idea de realizar dicho entrenamiento asistido de manera


autnoma en la siguiente figura.

5 Captulo 2: Tecnologas utilizadas


28
1 Introduccin

Figura 3. Entrenamiento sin y con aplicacin

El entrenamiento asistido dispondr, como se puede imaginar, de una serie de


rutinas de ejercicios que sern asignados por un especialista. As nos aseguramos de
que cada usuario, registrado en el sistema, disponga de un servicio personalizado. Estas
rutinas de ejercicios estarn almacenados en una base de datos a la cual el usuario
podr acceder desde su aplicacin mvil, pudiendo consultarlos en el momento que
desee, siempre y cuando se haya dado de alta en este servicio. Como se puede ver en
la Figura 4.

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

Figura 4. Comportamiento de nuestra aplicacin deportiva

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.

Autenticacin del usuario mediante la dupla usuario-contrasea.


Alta para un nuevo usuario.
Recordatorio de contrasea por medio de e-mail.
Acceso limitado para usuarios no registrados.
Configuracin de las preferencias6.

6 Apartado 3.3.2.1 Tabla configuracin


30
1 Introduccin

Tras esta pantalla inicial y el acceso de un usuario, ya sea registrado o no registrado,


ste deber poder:

Acceder a las rutinas de ejercicios de usuario (en caso de ser un usuario no


registrado, este acceso estar limitado).
Acceder de manera libre a todas las rutinas de ejercicios (servicio exclusivo para
usuarios registrados).
Dentro de las rutinas, el acceso a todos los ejercicios de la misma.

El acceso a ejercicios presentar dos alternativas:

Acceso detallado de cada uno de los ejercicios


Acceso rpido a los ejercicios a travs de una lista con los videos de los ejercicios de
la rutina a realizar.

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:

Una descripcin de la realizacin del ejercicio.


La finalidad del ejercicio concreto.
La duracin del ejercicio, en nmero de series o repeticiones.
El acceso a las propiedades del ejercicio, caractersticas o recomendaciones.
Los tiles necesarios, en el caso de que lo sean, para realizar el ejercicio. Un ejemplo
de ello podra ser el uso de cintas elsticas, pesas, guantes, etc. Estos tiles
aparecern en una lista de formato variable, donde al pulsarla obtendremos una
imagen del elemento en cuestin.
Fotos del ejercicio a realizar, para un mejor entendimiento del mismo. Se dispondr
de tres fotos con la idea de ofrecer una mayor claridad. Estas fotos seguirn siempre
el mismo esquema
o Una foto inicial, que ilustra el instante de inicio en el recorrido del ejercicio
o Una foto final, que ilustra el instante de fin en el recorrido del ejercicio
o Una foto con un detalle del ejercicio, que el mdico o entrenador ha estimado
oportuno resaltar.

30
Por ltimo, un video explicativo del ejercicio, donde se mostrar la realizacin del
ejercicio.

1.3.3 Arquitectura

En esta subseccin se ver la arquitectura de la solucin, sealando los


elementos de los que se compone, pudindose diferenciar tanto la parte de cliente como
la parte del servidor, en un modelo cliente-servidor.

Identificaremos a la parte de usuario, como aquella en la cual tenemos instalada


la aplicacin Android y a la parte del servidor, como aquella en la que se encuentra en
funcionamiento el servidor web HTTP, donde se desplegar nuestro servicio web, y la
base de datos MySQL. Ambas quedan reflejadas en la siguiente imagen.

Servicio Web
RESTful

Servidor
externo

Figura 5. Arquitectura y tecnologas usadas en el servicio

Usuario: Los diferentes usuarios que dispongan de la aplicacin instalada en sus


smarthphones o tablets Android, podrn acceder a los diferentes servicios que
ofrece dicha aplicacin.

Servidor Apache: Es el encargado de desplegar el Servicio Web RESTful, que


recibir las diferentes peticiones HTTP de los usuarios, algunas de ellas
codificadas mediante JSON. En estas peticiones ir toda la informacin que el
servidor pasar a procesar. El servicio web ser el encargado de realizar las
32
1 Introduccin

labores de comunicacin e intercambio de informacin con la base de datos


MySQL, mediantes sentencias SQL que estarn expresadas en Java. Tras dicho
intercambio con la base de datos, la informacin ser devuelta al usuario en forma
de respuestas HTTP, codificadas mediante JSON o en texto plano.

Base de datos: Ser el lugar donde se encuentra toda la informacin de los


entrenamientos, como son las rutinas, los ejercicios, los datos de usuario, la
configuracin del entorno, etc.

Servidor externo: El servidor externo Imgur ser el utilizado para el hosting de


las imgenes que utiliza nuestra aplicacin. Por ello, cuando nuestra aplicacin
solicite una imagen, la respuesta que genere nuestra base albergar, en realidad,
la direccin donde estar alojada nuestra imagen en el servidor Imgur.

1.4 Estructura de la memoria

A continuacin, se presenta la estructura que tendr la memoria, sta consistir en


cinco captulos y seis anexos.

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.

En el segundo captulo, nos centraremos en la explicacin de todas las tecnologas


usadas que van a intervenir en la realizacin de nuestro proyecto final de carrera. Y,
argumentaremos nuestra toma de decisin para cada una de las tecnologas implicadas.

En el tercer captulo, se explicar de qu manera se realizan las comunicaciones


entre todos los elementos que intervienen en nuestro proyecto. Es decir, la aplicacin
Android, el servicio web RESTful y la base de datos. As como una descripcin de la
base de datos.

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.

En el ltimo captulo, se expondrn las posibles lneas de continuacin del proyecto


y se acompaaran de algunas conclusiones de carcter tcnico. Adems, se compartirn
las impresiones que ha tenido un presente en la elaboracin de este trabajo.

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.

En nuestro segundo anexo, es decir el Anexo B, se trata de explicar en base a un


anlisis actual de la cuota de mercado, el impacto que tendra nuestra aplicacin, al estar
dicha solucin implantada sobre la plataforma Android.

Cmo diremos en el siguiente captulo, tenemos dos formas de desplegar un servicio


web RESTful en Eclipse. Y aunque nosotros hemos elegido aquella que nos parece ms
til, en este tercer anexo, pasamos a explicar las dos maneras en la que un programador
puede proceder.

En el Anexo D, se ha elaborado un manual de instalacin con las tecnologas que


hemos utilizado, con el fin de facilitar al lector la puesta en marcha de un entorno de
desarrollo para probar este proyecto.
34
1 Introduccin

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

A continuacin, presentamos el escenario de actuacin al cual estamos sometidos.

RESTful
BD
Web Service MySQL

Figura 6. Esquema bsico de funcionamiento del proyecto

Haciendo referencia a la numeracin indicada en la ilustracin, podemos comentar:

1. Los antecedentes7 a este proyecto ya sientan las bases de la toma de


decisin de algunas tecnologas implicadas que habr que usar, todas ellas
ubicadas en el lado del cliente Android. Nosotros remitimos al lector, en caso
de duda, a consultar la argumentacin del uso de dichas tecnologas.

2. En cambio, nosotros nos centraremos en aquello que nos concierne, es


decir, en las tecnologas que interviene en el desarrollo de nuestro servicio
web y base de datos.

7 Seccin 1.2 Antecedentes


36
Tecnologas utilizadas

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

Debido a que este apartado ya est presente en el proyecto predecesor, se remite


al lector la siguiente referencia8, en la que se abordar una detallada explicacin de
Android.

Figura 7. Logo Android

Por tanto, en el presente documento solo rescataremos aquellas conclusiones que


nos sirvan de utilidad, en cuanto a la relacin que presenten con el resto de tecnologas
aqu expuestas.

A continuacin, pasaremos a enumerarlas:

Android es de uso libre y todas las herramientas y el entorno de trabajo que se ha


usado para desarrollar la aplicacin de este proyecto son gratuitos (Eclipse, Java,
XAMPP, Advanced REST Client, Wireshark, Apache).

Impacto elevado de Android en el mercado actual.

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

Debido a que este apartado ya est presente en el proyecto predecesor, se remite


al lector a los antecedentes, en la que se abordar una detallada explicacin de JSON.

Figura 8. Logo JSON

Tan solo, nos limitaremos a mostrar la estructura de un objeto JSON para aquellos
a quienes les sea desconocido.

Figura 9. Estructura de un objeto JSON

9 Subseccin 1.2.2 Otras referencias


10 Anexo B: Estudio cuota de mercado
38
Tecnologas utilizadas

2.4 Eclipse

Aunque podramos hacer una referencia a la documentacin de eclipse, hemos


optado por exponerla en este apartado con la firme idea de ayudar al lector a comprender
la parte relacionada con el servicio web.

Eclipse es un programa informtico compuesto por un conjunto de herramientas


de programacin de cdigo abierto multiplataforma. Eclipse fue desarrollado
originalmente por IBM como el sucesor de su familia de herramientas para VisualAge.

Figura 10. Logo Eclipse

Eclipse es ahora desarrollado por la Fundacin Eclipse, una organizacin


independiente sin nimo de lucro que fomenta una comunidad de cdigo abierto y un
conjunto de productos complementarios, capacidades y servicios. El entorno de
desarrollo integrado de Eclipse emplea mdulos (plug-in) para proporcionar toda su
funcionalidad al cliente segn sus necesidades, a diferencia de otros entornos
monolticos donde las funcionalidades estn todas incluidas, las necesite el usuario o no.
Este mecanismo de mdulos consigue una plataforma ms ligera en cuanto a software.

El SDK11 de Eclipse incluye las herramientas de desarrollo de Java, ofreciendo un


IDE12 con un compilador de Java interno y un modelo completo de los archivos fuente de
Java, permitiendo al programador crear aplicaciones para un determinado paquete de
software.

2.4.1 Uso de eclipse en el proyecto

En esta subseccin, pasaremos a distinguir el uso que le hemos dado a eclipse.


En un primer lugar desde el punto de vista del cliente Android y, en segundo lugar desde
un punto de vista del servicio web.

11 Software Development Kit


12 IDE: Entorno de desarrollo Integrado (Traduccin)

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.

La estructura interna de ficheros que compone cualquier proyecto Android


desarrollado en Eclipse, es la que aparece en la siguiente ilustracin:

Figura 11. Estructura proyecto Android en Eclipse

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.).

La carpeta src compone la lgica de la aplicacin, la cual se puede subdividir en


carpetas; en este ejemplo test contiene la lgica escrita en Java y test.library contiene
libreras creadas por el usuario que sern usadas en diferentes partes del cdigo,
simplificndolo en muchos casos.
40
Tecnologas utilizadas

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.

As pues, a grosso modo, imaginemos un botn cuya id descripcin sea


Button. Ese identificador ser el usado por la lgica Java para indicarle a la aplicacin
que hacer cuando se pulse (funciona como un listener).

Otras de las carpetas a describir es gen, la cual se genera de manera


automtica, y la utilidad que tiene es almacenar los identificadores de los recursos
usados en las pantallas XML (botones, EditText, etc.) los cuales sern usados por la
lgica Java, es decir, es un nexo de unin entre la lgica y la apariencia de las pantallas.

Por ltimo, destacar el archivo AndroidManifiest, en el cual se especifican todos


los permisos que debe concederse a la aplicacin (uso de internet, manejo de la
vibracin, posible uso de la Sd-Card) as como qu actividades (activities) pueden ser
abiertas por la aplicacin (cada pantalla es una nueva activity) y su orientacin.

El resto de carpetas y archivos son generados de manera automtica por Eclipse


para su correcto funcionamiento interno, no siendo usados por el programador.

2.4.1.2 Parte Web

La parte web constar, como ya sabemos, de un Servicio Web RESTful, el cul


discutiremos en la seccin 2.10 Servicio Web.

En eclipse, existen dos formas de construir un servicio web, stas son:

Por medio de la creacin de un proyecto web dinmico.

Por medio de un proyecto Maven.

Ambas formas de creacin de dicho proyecto se especificar en su correspondiente


anexo13.

13 Anexo C: Crear un proyecto web

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.

A continuacin, mostraremos la estructura que un artefacto Maven muestra, y los


elementos que lo componen.

14 Project Object Model


42
Tecnologas utilizadas

Artefacto

Figura 12. Estructura de un artefacto Maven

Como vemos, un artefacto Maven tiene la estructura tpica de un proyecto Java.


Dispone de un Artefacto, que es un simple proyecto, gestionado por Maven.
Simplemente que en Maven llaman a un proyecto como artefacto. Dicho artefacto suele
tener cuatro carpetas por defecto:

src/main/java: donde guardaremos nuestras clases java fuente. Debajo de esta


carpeta situaremos nuestras clases en distintos paquetes.

src/main/resources: aqu almacenaremos los recursos (ficheros xml, ficheros de


propiedades, imgenes,) que pueda necesitar las clases java de nuestro
proyecto. Igualmente aqu tienen que ir los ficheros de configuracin de Spring o
Hibernate, por ejemplo.

src/test/java: en dicha carpeta se guardan las clases de test que se encargarn


de probar el correcto funcionamiento de nuestra aplicacin. Aqu por ejemplo
podemos guardar nuestros test unitarios de JUnit.

src/test/resources: en esta carpeta guardamos los recursos que usan los


recursos. Como en nuestro proyecto no nos har falta esta carpeta, la eliminamos.

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:

Figura 13. Estructura del pom.xml de un artefacto Maven

En nuestro caso, adems, por tratarse de un proyecto web, tendremos el fichero


web.xml. ste, es un fichero xml que contiene informacin sobre la estructura y las
dependencias externas de los componentes web en el mdulo y, describe cmo se
utilizan los componentes en tiempo de ejecucin. Para permitir que el contenedor web
pueda ejecutar aplicaciones JAX-RS15, puede configurar el archivo web.xml para que
apunte directamente al servlet JAX-RS. Cuando se utilizan servlets, puede definir una
va de acceso del servlet en el archivo web.xml que se aadir al URL raz.

15 Java API for RESTful Web Services


44
Tecnologas utilizadas

Figura 14. Estructura del web.xml de un artefacto Maven

2.5 XAMPP

XAMPP es un servidor independiente de plataforma, software libre, que


consiste principalmente en la base de datos MySQL, el servidor web Apache y los
intrpretes para lenguajes de script: PHP y Perl. El nombre proviene del acrnimo de X
(para cualquiera de los diferentes sistemas operativos), Apache, MySQL, PHP, Perl.

El uso que se le da en el proyecto a XAMPP es para emular los servicios


necesarios para el correcto funcionamiento de la aplicacin de manera local, tales como
el servidor HTTP16 (Servidor Apache), as como la gestin y administracin de la base
de datos mediante MySQL. Es importante destacar que XAMPP debe ejecutarse bajo
los derechos de administrador para poder funcionar de manera correcta.

La pantalla del panel de control de XAMPP se muestra en la siguiente figura:

16 Hypertext Transfer Protocol

44
Figura 15. Panel de control de XAMPP

Se remite al lector a la siguiente referencia17, donde podr consultar la explicacin de los


siguientes mdulos.

2.5.1 Mdulo Apache

2.5.2 Mdulo MySQL

2.6 Advanced REST Client

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.

Figura 16. Logo Advanced REST client

17 Seccin 1.2 Antedecentes


46
Tecnologas utilizadas

La iniciativa de esta herramienta nace con la idea de poder ir comprobando gran


parte de la implementacin de nuestro servicio web, sin necesidad de tener programada
la parte de la aplicacin Android que se encargue del consumo del servicio web.

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:

La direccin URL de nuestro servicio, o URI

El mtodo HTTP a utilizar: GET, POST, PUT, DELETE

Aunque tambin podemos usar un modo de uso un poco ms avanzado, en cual


los campos que tendremos que rellenar sern:

La direccin URL, que estar dividida en

o HOST

o PATH

Parmetros que lleve nuestra URI

Mtodo HTTP a utilizar: GET, POST, PUT, DELETE

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

Wireshark es una herramienta multiplataforma de anlisis de red, producto de la


evolucin de Ethereal. Funciona al igual que lo puede hacer cualquier otro sniffer tal
como Windump, TCPDump o dsniff. Pero, al contrario de estos, lo hace mostrando los
datos a travs de un entorno grfico y de forma ms amigable y entendible.

46
Figura 17. Logo wireshark

Wireshark es un proyecto de software libre, y se distribuye bajo la Licencia Pblica


General de GNU (GPL). Cualquier usuario que lo descargue puede utilizar libremente
Wireshark en cualquier nmero de ordenadores, sin tener que preocuparse acerca de
las claves de licencia ni derechos. Es ms, todo el cdigo fuente est disponible
libremente bajo la licencia GPL. Debido a esto, es muy fcil para los usuarios aadir
nuevos protocolos Wireshark, ya sea como plugins, o integrados en la fuente.

Con l, supervisaremos el comportamiento que tendr el esquema cliente-servidor


formado por la aplicacin Android y el Servicio Web RESTful. En la siguiente ilustracin,
vemos una captura realizada mientras se est realizando una peticin al servicio web.

Figura 18. Wireshark analizando nuestra interfaz de red

Cabe destacar que wireshark incluye muchas funcionalidades tiles en su interfaz


grfica. Nosotros al hacer un uso simple de aplicacin, no entraremos en detalle de todo
su potencial. Sin embargo, s que comentaremos la utilidad de usar el filtro de paquetes
del que disponemos. Basta con localizar la barra de tareas con el nombre de Filtrer y
escribir http.request.

Figura 19. Filtrado de peticiones GET/POST en wireshark


48
Tecnologas utilizadas

De esta manera estaremos filtrando todas las peticiones GET y POST, y nuestra
bsqueda de paquetes se har mucho ms fcil.

2.8 Notepad++

Una vez ms, se remite al lector a la siguiente referencia18, en la que podr


disfrutar de una completa explicacin de esta aplicacin y del porqu del uso en este
proyecto.

Figura 20. Logo 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.

Figura 21. Logo Imgur

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.

18 Seccin 1.2 Antecedentes

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.

Figura 22. Editor online de imgenes ofrecido por imgur.com

2.9.1 Formatos disponibles

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.

19 Bulletin Board Code


50
Tecnologas utilizadas

Figura 23. Formatos disponibles para nuestra imagen

2.9.2 Conclusiones

Resulta de inters, el hecho de separar el almacenamiento de los archivos


multimedia, ya que as, lograremos descentralizar las dependencias de nuestro servicio
web. Por un lado, hemos usado nuestro servidor Apache para el almacenamiento de los
videos, opcin que sera igualmente vlida para el caso de las imgenes. Sin embargo,
hemos optado por usar otro servidor para dotar a nuestro servicio web de un
comportamiento distribuido con la idea de que en lneas futuras cuando el volumen de
datos de la aplicacin sea considerable se puedan usar servidores de hosting externos
y descentralizar tambin los videos. En este caso, si nos falla el servidor de imgenes
pierde la conexin, podramos ofrecer un entrenamiento alternativo por medio de una
rutina de ejercicios basada en videos.

2.10 Servicio Web

En esta seccin haremos una introduccin a los servicios web con su posterior
clasificacin y eleccin de la solucin.

2.10.1 Historia

La preocupacin por los sistemas distribuidos y de cmo diferentes mquinas


podan comunicarse entre s surgi en la dcada de los 90. Hasta ese momento, era
suficiente con que las aplicaciones de un mismo ordenador pudieran establecer una

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.

Ms adelante, Microsoft cre DCOM21 y Sun, RMI22. Aunque estos mtodos


permitan establecer una conexin entre ordenadores a travs de la red, tampoco eran
interoperables ya que RMI est disponible nicamente para Java, y por tanto, es
dependiente del lenguaje de programacin. Por todo ello, Microsoft empez a interesarse
por la computacin distribuida basada en XML en el ao 1997. Su objetivo era terminar
con los problemas de interoperabilidad de las soluciones anteriores y permitir que las
aplicaciones se conectaran mediante RPCs23, utilizando los estndares de comunicacin
XML y HTTP.

Precisamente, ser la bsqueda de esta interoperabilidad un factor clave para el


devenir de los servicios web. En una sociedad visionaria que empezaba a cambiar, una
sociedad de la informacin, que demandaba de esta flexibilidad para construir
aplicaciones cada vez mayores; eso s, a partir de componentes distribuidos ms
pequeos. Tendencia que sigue vigente tras el transcurso de los aos.

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.

20 Common Object Request Broker Architecture


21 Distributed Component Object Model
22 Remote Method Invocation

23 Remote Procedure Call


52
Tecnologas utilizadas

La interoperabilidad se consigue mediante la adopcin de estndares abiertos.


Las organizaciones OASIS y W3C24 son los comits responsables de la arquitectura y
reglamentacin de los servicios web.

Estos servicios proporcionan mecanismos de comunicacin estndares entre


diferentes aplicaciones, que interactan entre s para presentar informacin dinmica al
usuario. Para proporcionar interoperabilidad y extensibilidad entre estas aplicaciones, y
que al mismo tiempo sea posible su combinacin para realizar operaciones complejas,
es necesaria una arquitectura de referencia estndar.

Los Servicios Web admiten la siguiente clasificacin, segn su especificacin.

2.10.2.1 Big Web Services

A partir de Java EE 6, JAX-WS25 proporciona la funcionalidad para los big web


services. Estos servicios web big usan mensajes XML que siguen el estndar SOAP,
un lenguaje XML que define una arquitectura de mensajes y los formatos de los
mensajes. Estos sistemas suelen contener una descripcin legible por la mquina de las
operaciones que ofrece el servicio, escrito en el WSDL, un lenguaje XML para la
definicin de interfaces.

2.10.2.2 RESTful Web Services

A partir de Java EE 6, JAX-RS26 proporciona la funcionalidad para los RESTful


web services o servicios web REST. REST es adecuado para los bsicos escenarios de
integracin ad hoc. A menudo, estos tipos de servicios web estn mejor integrados con
HTTP que los servicios web basados en SOAP, dado que no requieren mensajes XML
que sobrecargan las cabeceras, ni definiciones WSDL del servicio-API.

Entre las implementaciones de JAX-RS se incluyen:

Apache CXF
Jersey
RESTEasy

24 World Wide Web Consortium


25 Java API for XML Web Services
26 Java API for RESTful Web Services

52
Restlet
Apache Wink
JBoss

Nosotros, estando de acuerdo con el Tutorial de JAVA EE 6, elegiremos Jersey para la

implementacin del servicio, presentando los motivos en la seccin 2.12 Jersey.

2.10.3 Eleccin de un servicio web RESTful

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.

2.10.3.1 Toma de decisin

Ambas especificaciones, son APIs del lenguaje de programacin Java que


proporciona soporte para la creacin de servicios web. Como dijimos anteriormente,
JAX-WS se apoya en el intercambio de mensajes XML, con la consiguiente sobrecarga
de cabeceras que ste conlleva, la complejidad de usar XML en lugar de JSON y la
dificultad aadida no poder evolucionar cliente y servidor de manera independiente para
un nmero considerable de usuarios.

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

Empezamos aclarando que REST no es un ningn tipo de estndar, aunque est


basando en algunos de ellos como pueden ser:

HTTP
URL
Representacin de los recursos: XML/HTML/GIF/JSON/JPEG/
Tipos MIME: text/html, application/json

REST Representational State Transfer - es una arquitectura sencilla que describe


el acto de transferir un estado por sus representaciones. En su disertacin, Roy Fielding
54
Tecnologas utilizadas

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.

2.10.4.1 Principios de REST

La escalabilidad alcanzada en estos sistemas se debe principalmente a las siguientes


pautas que se ha de seguir en su diseo. stas son:

Un protocolo cliente/servidor sin estado: cada mensaje HTTP contiene toda la


informacin necesaria para comprender la peticin. Como resultado, ni el
cliente ni el servidor necesitan recordar ningn estado de las comunicaciones
entre mensajes. Sin embargo, en la prctica, muchas aplicaciones basadas en
HTTP utilizan cookies y otros mecanismos para mantener el estado de la
sesin (algunas de estas prcticas, como la reescritura de URLs, no son
permitidas por REST)

Un conjunto de operaciones bien definidas que se aplican a todos los recursos


de informacin: HTTP en s define un conjunto pequeo de operaciones, las
ms importantes son POST, GET, PUT y DELETE. Con frecuencia estas
operaciones se equiparan a las operaciones CRUD en bases de datos (ABMC
en castellano: Alta, Baja, Modificacin y Consulta) que se requieren para la
persistencia de datos, aunque POST no encaja exactamente en este esquema.

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

JAX-RS proporciona anotaciones para definir recursos y acciones que pueden


tomarse en dichos recursos. Dichas anotaciones sirven para ayudar a mapear una clase
recurso (un POJO) como un recurso web.

Estas anotaciones se incluyen, junto a una pequea descripcin en la siguiente


tabla.

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.

Tabla 1. Sumario de las anotaciones JAX-RS extradas del tutorial JAVA EE 6

2.12 Jersey

De acuerdo con el Tutorial de JAVA EE 6, Volumen 1: Jersey es la


implementacin de referencia de calidad de produccin de SUN para JSR 311: JAX-RS:
The Java API for RESTful Web Services. Jersey implementa soporte para las
anotaciones definidas en el JSR-311, lo que facilita a los desarrolladores crear servicios
web RESTful con Java y la JVM de Java.

Figura 24. Logo 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.

El funcionamiento de Jersey se basa en el uso de las anotaciones, que hemos


visto anteriormente27, para el consumo y utilizacin de los recursos del servicio web. La
forma en la que usamos Jersey en nuestro servicio web es simple. Para ello, y antes de
continuar, remitimos al lector al apartado correspondiente28, donde se hizo una
explicacin de los ficheros que vamos a usar a continuacin.

2.12.1 Mapeo de peticiones web

En primer lugar, tendremos que configurar el fichero web.xml de nuestro


proyecto Maven, para que nuestro servicio web sepa qu hacer con las peticiones que
les llega y qu clases java usar. Esto lo haremos de mano de una ilustracin utilizada
anteriormente.

Figura 25. Fichero web.xml de un artefacto Maven

27 Subseccin 2.11.1 Especificacin


28 Apartado 2.4.1.2 Parte Web
58
Tecnologas utilizadas

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:

<servlet-name>: en nuestro caso, coincidir con el nombre de nuestro


artefacto Maven, es decir, RESTWebServiceAndroid

<param-value>: en nuestro caso, coincidir con el paquete donde se va a


encontrar la clase principal, es decir, com.josvalbae.rest

<url-pattern>: en nuestro caso, ser /rest/*

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.

Ahora y, teniendo en cuenta que, usaramos JSON en el intercambio de


informacin entre la aplicacin Android y servicio web, necesitamos ver de qu manera
nuestro Jersey va a soportar el uso de JSON.

2.12.2 Soporte de JSON

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

Tabla 2. Posibilidades de soportar el uso de JSON

De los tres enfoques, el primero es el ms genrico y permite asignar cualquier


objeto Java a JSON y viceversa. Por eso ser el que elijamos.

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.

El tercer enfoque, a pesar de un control completo sobre el formato del JSON


producido y consumido, se hace ms complejo tratar con objetos del modelo de datos
en comparacin a los otros dos enfoques. Dicho lo cual, tambin queda descartado este
enfoque, quedndonos pues, con el primero basado en clases simples30.

De los posibles mdulos a elegir tenemos, destacamos:

MOXy

o Es el preferido

o Soporta XML y JSON

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

30 Clases POJO: Plain Old Java Object


60
Tecnologas utilizadas

JSONConfiguration.FEATURE_POJO_MAPPING. Esto se puede hacer en el fichero


web.xml usando el siguiente parmetro en nuestro servlet.

Figura 26. Configuracin servlet para soportar enfoque POJO

Y tambin, debemos aadir la dependencia de la librera Jackson a nuestro fichero


pom.xml.

Figura 27. Importacin de dependencias de Jackson

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

A continuacin, se muestra cules son las tecnologas utilizadas en nuestro


proyecto, donde nuestra aplicacin Android se pondr en contacto con nuestro servicio
web, el cual, estar desplegado sobre un servidor Apache Tomcat. Ser este servicio
web quien realice las consultas a nuestra base de datos MySQL. Adems, nuestra
aplicacin obtendr las imgenes de un servidor externo como comentamos en la
subseccin correspondiente31. Para dicha explicacin, nos apoyaremos en una
ilustracin ya utilizada, pero la usaremos para indagar en cmo el servicio web trabaja
sobre esa arquitectura.

Servicio Web
RESTful

Servidor
externo

Figura 28. Arquitectura y tecnologas usadas en el servicio

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.

El servicio web identifica por medio de la URI, el recurso que se va a utilizar,


adems de los parmetros, en el caso de que la peticin incluya algunos.

31 Subseccin 1.3.3 Arquitectura


62
Servicio web desarrollado

El propio recurso web, se pondr en contacto con la base de datos y, obtendr la


informacin de ella. Tras esto, construye la respuesta de dos formas diferentes.

o Usando una clase POJO, que se serializa automticamente, para generar


una respuesta HTTP que contiene el objeto tipo JSON32 y, en algunos
casos, un array tipo JSON.

o Generando una respuesta HTTP que contenga la informacin en un texto


plano.

Enva la repuesta HTTP a la aplicacin, que se encargar de procesarla


adecuadamente y, de la que podr obtener un array u objeto tipo JSON, pero
tambin una cadena de texto. (sta ltima, se suele usar para indicar el estado
del servicio web tras las operaciones y notificar que ha habido algn tipo de error
o por lo contrario que todo ha ido correctamente).

o En el caso de que hayamos solicitado un recurso del tipo imagen, y como


dijimos en la subseccin 1.3.3, la informacin que llega al dispositivo mvil
es la direccin web dnde tiene que pedir ese recurso.

3.2 Comunicacin con el servicio web

A continuacin, vamos a exponer como nuestra aplicacin realiza la comunicacin


con el servicio web por medio de peticiones HTTP. Distinguiremos qu tipos de
peticiones nos van a hacer falta para cubrir la necesidad de la aplicacin, clasificaremos
las URIs33 de nuestro servicio web en funcin del tipo de peticin web que consuman.
Relacionaremos estas URIs con los mtodos del servicio web a los que estn asignadas.
Y para terminar, explicaremos mediante un diagrama de secuencia los casos que se
pueden registrar en nuestra aplicacin.

La comunicacin de la aplicacin con nuestro servicio web se hace a travs de


RESTful, para dicha comunicacin se van a usar dos tipos de peticiones:

32 Basado en la serializacin del objeto POJO


33 Uniform Resource Identifier

62
GET: Para consultar y obtener recursos.

POST: Para crear recursos.

3.2.1 URIs y mtodos. Relacin

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.

A continuacin pasaremos a explicar, la funcionalidad que tiene cada uno de los


mtodos direccionables por las URIs de la tabla anterior. Pero antes, veremos que
estructura tiene nuestro servicio web y como las clases se organizan en los diferentes
paquetes.
64
Servicio web desarrollado

Figura 29. Agrupacin de clases java de nuestro servicio web

Como podemos ver, hemos agrupado las clases en cuatro paquetes segn la finalidad
que tengan.

Paquete com.josvalbae.db: Aqu agruparemos todas las clases que guarden


relacin con la base de datos, por ejemplo crear una conexin con la misma.
Adems, aqu tambin estarn todas las clases que usaremos para serializar y
deserializar los objetos/arrays tipo JSON en objetos Java, y viceversa.

Paquete com.josvalbae.mail: Aqu tenemos la clase que obtiene todos los


parmetros necesarios para poder enviar la contrasea olvidada al usuario
(cliente, puerto y token de Gmail), como la clase que se encarga de editar los
campos del e-mail y enviarlo.

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.

Ahora s, clasificaremos todos estos mtodos que pertenecen a nuestra clase


PrincipalWS.java segn la URI a la que son asignados.

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

Tabla 4. Relacin entre URIs y mtodos java

Por ltimo, solo nos queda comentar qu realizan estos mtodos.


66
Servicio web desarrollado

CompruebaBD: Comprueba, de manera previa al registro de un usuario, si existe


algunos de los parmetros sensibles introducidos por el usuario ya existen en
nuestra base de datos. Estos son: DNI, username, telfono y direccin de correo.

ObtUserData1: Para un username introducido, devuelve todos los datos de


usuario que estn en nuestra base de datos.

EntrenamientoLibre: Nos devuelve todas las rutinas de la base de datos en un


JSON array. Para ello se apoya en la clases Rutinas.java y List_Rutinas.java con
la que serializa el objeto java para convertirlo en dicho array tipo JSON.

EntrenamientoPersonal: Nos devuelve todas las rutinas que un usuario tenga


asignadas, en principio por su entrenador. Funciona igual que
EntrenamientoLibre.

ListaEjercicios: Nos devuelve todos los ejercicios pertenecientes a una rutina


seleccionada. Se apoya en las clases Ejercicios.java y List_Ejercicios.java para
generar un array tipo JSON, serializando un objeto java, que entregar al usuario.

EligeEjercicios: Para un ejercicio seleccionado nos devuelve toda la informacin


relevante de ste: descripcin, finalidad y duracin. Se apoya en las clases
Ejercicios.java y List_Ejercicios.java para serializar un objeto java a un JSON
array.

ExplicacionEjercicio: Para un ejercicio seleccionado nos devuelve la descripcin


del mismo. Se apoya en las clases Ejercicios.java y List_Ejercicios.java para
serializar un objeto java a un JSON array.

CaracteristicasEjercicio: Para un ejercicio seleccionado nos devuelve las


caractersticas del mismo. Se apoya en las clases Ejercicios.java y
List_Ejercicios.java para serializar un objeto java a un JSON array.

RecomendacionesEjercicio: Para un ejercicio seleccionado nos devuelve las


recomendaciones del mismo. Se apoya en las clases Ejercicios.java y
List_Ejercicios.java para serializar un objeto java a un JSON array.

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.

EligeMusculo: Para un ejercicio seleccionado nos devuelve todos los msculos


implicados en el mismo. Se apoya en las clases Musculos.java y
List_Musculos.java para serializar un objeto java a un JSON array.

CargaFotoMusculo: Para un msculo 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 Musculos.java y List_Musculos.java para
serializar un objeto java a un JSON array.

CargaFotos: Para un ejercicio seleccionado nos devuelve tres fotos (posicin de


inicio, posicin fin y posicin detalle). Se apoya en las clases Recursos.java y
List_Recursos.java para serializar un objeto java a un JSON array.

CargaVideos: Para un ejercicio seleccionado nos devuelve la direccin de un


video para observar la realizacin del ejercicio.

createUserInJSON1: Recibiremos un JSON con todos los datos de usuario que


des-serializaremos a un objeto java con la ayuda de la clase UsuarioDB.java. Y,
que usaremos para registrar a este nuevo usuario en nuestra base de datos.

SendPass: Se encargar de enviar al correo la contrasea que el usuario ha


olvidado. Se apoyar en el paquete com.josvalbae.db

LoginUser: Se encargar de autenticar al usuario en el proceso de login,


comprobando que la dupla usuario-contrasea existe en nuestra base de datos.
68
Servicio web desarrollado

Configuracion: Recibir un JSON, que des-serializara usando la clase


Configuracion.java, con las preferencias del sistema que el usuario ha configurado
y las almacenar en la base de datos.

ModifyUserInJSON: Para un usuario especificado, nos devolver todos los datos


de ste para modificarlos desde la aplicacin Android.

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.

3.2.2 Diagrama de secuencia

A continuacin, pasamos a explicar por medio de ilustraciones el tipo de peticiones


que se pueden dar entre nuestra aplicacin y nuestro servicio web.

3.2.2.1 Peticiones GET

Para entender cmo procede nuestro servicio ante una peticin GET,
estableceremos un contexto que se definir a continuacin.

Nos situamos en el proceso de registro de usuario, en el cual, lo primero que se


debe hacer es comprobar que ningn campo sensible est ya registrado en nuestra
base de datos. Para ello, nuestra aplicacin realizar una peticin GET con la URI /db
hacia nuestro servicio web e incluyendo los campos, explicados a continuacin, como
parmetros.

Nuestros campos sensibles sern:

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:

Coger los parmetros que se incluyen en la peticin que realiza la aplicacin.

Creacin de una conexin hacia la base de datos.

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.

Comprobacin campo por campo con la base de datos.

o Modificacin del valor de los campos del objeto Java.

Fin de la conexin con la base de datos.

Serializacin del objeto POJO a JSON, y devolucin de este JSON.

Se remite al lector a la siguiente subseccin34, donde se explica todo lo relativo al


soporte de JSON usando objetos POJO.

34 Subseccin: 2.12.2 Soporte de JSON


70
Servicio web desarrollado

WS BD
@Path(/db)

Obtenemos datos
Buscamos si tenemos algn recurso con
Peticin GET @QueryParam la direccin /db

Path /db Leemos valores

Creacin de conexin

Respuesta

Comprobacin del parmetro

Comprobacin 1er parmetro

Respuesta

Asignamos valor de respuesta a clase POJO

Procedemos de igual manera con el resto de parmetros

Cierre de conexin

Respuesta

Conversin interna de clase POJO a objeto JSON

JSON

Fin de la funcionalidad del recurso

Procesamiento de errores

La aplicacin
sigue trabajando
por su cuenta
para realizar el
proceso de
registro mediante
la utilizacin de
otros recursos.

Figura 30. Diagrama de secuencia. Peticin GET

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.

Nos situamos en el proceso de configuracin del servicio web, en el cual, se ofrece


al usuario la posibilidad de especificar el valor de aquellos parmetros de configuracin
a los que est sometido nuestro servicio. Ellos son:

Direccin IP del servidor donde estn desplegado nuestros servicios.

Direccin de correo del cliente email que usa nuestro servicio web para el reenvo
de las contraseas.

Puerto SMTP del cliente Gmail que usamos.

Token de seguridad que permite el uso de nuestro cliente Gmail en el servicio


web.

El funcionamiento que deber de seguir la aplicacin es el siguiente:

Consultar, por medio de la clase Android SharedPreferences, al sistema los


parmetros que hemos comentado anteriormente y los mostrar por pantalla,
donde el usuario podr comprobar si necesitan configurarse.

En caso afirmativo, el usuario podr modificarlos usando la interfaz grfica y


guardar las nuevas preferencias, como vemos en la Figura 31.

Se generar un objeto JSON con la nueva informacin til de configuracin y,


se genera la peticin POST.

o Debemos de tener en cuenta que slo almacenaremos los parmetros que


necesite nuestro servicio web. Dicho esto, queda excluida la direccin IP.

o Se indicar la URI que nos conduzca hacia el mtodo que queramos


ejecutar. En este caso, la URI es /configuracion.

El servicio web identificar la URI /configuracion con el mtodo Configuracion,


como se indica en la Tabla 4. De este modo, el servicio web pasar a ejecutar dicho
mtodo, que realizar las siguientes tareas:
72
Servicio web desarrollado

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.

Establecemos una conexin con la base de datos y comprobamos si han


cambiado los parmetros, en cuyo caso, los reemplazamos.

o El hecho de tener dichos parmetros de configuracin almacenados en


la base de datos, nos ayuda, en el caso de que stos aumenten, a que
nuestra aplicacin evite tener que mandar todos los parmetros que el
servicio web requiera en cada peticin.

Figura 31. Ajustes de las preferencias del sistema

72
WS BD
@Path(/configuracion)

Obtenemos datos
Buscamos si tenemos algn recurso

Peticin POST JSONObject con la direccin /configuracion

Path /configuracion Leemos valores

Creacin de conexin

Respuesta

Comprobacin de los nuevos valores

Comprobacin de los nuevos valores

Respuesta

Procesamos la respuesta

Cierre de conexin

Respuesta

Elaboramos nuestra respuesta HTTP

HTTP texto/plano

Fin de la funcionalidad del recurso

Figura 32. Diagrama de secuencia. Peticin POST


74
Servicio web desarrollado

3.3 Base de datos

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

El sistema de base de datos operacional MySQL35 es hoy en da uno de los ms


importantes en lo que hace al diseo y programacin de base de datos de tipo relacional.
Una de las caractersticas ms interesantes de MySQL es que permite recurrir a bases
de datos multiusuario a travs de la web y en diferentes lenguajes de programacin que
se adaptan a diferentes necesidades y requerimientos. Por otro lado, MySQL es
conocida por desarrollar alta velocidad en la bsqueda de datos e informacin, a
diferencia de sistemas anteriores.

Es software de libre distribucin y licencia, el cual se puede descargar fcilmente


de la web de apache36.

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.

A pesar de ello, mostraremos en la Figura 33, el modelo relacional de nuestra


base de datos38.

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.

35 My Structured Query Language


36 https://www.apachefriends.org/es/download.html
37 Aplicacin Android para la rehabilitacin fsica de usuario usando MySQL, PHP, y codificacin JSON
38 androidprueba.sql

74
Figura 33. Modelo relacional androidprueba.sql

Figura 34. Tabla de relaciones claves forneas


76
Servicio web desarrollado

3.3.2 Utilizacin de las tablas

Como ya dijimos en la subseccin anterior, remitimos al usuario al proyecto


original para la consulta del significado de las tablas que aparecen en la base de datos.

En cambio, explicaremos nicamente el significado de una de ellas:

Configuracin: tabla que almacena los valores de las preferencias que


necesita almacenar nuestro servicio web.

3.3.2.1 Tabla configuracion

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.

Figura 35. Tabla configuracion

A pesar de no ser un campo que pertenezca a las preferencias del sistema, id es la


clave primaria de esta tabla. As nos garantizamos que solo podr haber una entrada en
la tabla con los datos de configuracin vlidos, en cualquier instante. Esto es posible
porque id siempre va a valer 1. Por tanto, si queremos cambiar los ajustes, borramos
la entrada de la tabla e introducimos los nuevos.

A continuacin, explicaremos para una mayor claridad el significado de estos campos:

clientegmail: Cliente de Gmail encargado de enviar el e-mail con la


contrasea olvidada al usuario.

76
puertogmail: Puerto que usa Gmail para enviar los correos. En nuestro
caso, usaremos el puerto de SMTP39 para implementar TLS40.

tokengmail: Token de seguridad para permitir que nuestro servicio web


haga usa de nuestra direccin de correo como cliente Gmail.

3.3.3 Almacenamiento de videos

Ya dijimos que todas las imgenes que bamos a emplear estaban en un servidor
de hosting externo, Imgur.

En cambio, los videos se encontrarn en nuestro servidor. stos se encontrarn


en la carpeta donde instalamos XAMPP. Dentro de sta, iremos a la carpeta htdocs y
una vez dentro vemos una carpeta llamada videos, como muestra la siguiente figura.

Figura 36. Directorio de almacenamiento de videos

39 Simple Mail Transfer Protocol


40 Transport Layer Security
78
Servicio web desarrollado

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

En primer lugar recordaremos las funcionalidades que va a implementar nuestra


aplicacin una vez iniciada.

Autenticacin de usuario mediante la dupla username-password.

Acceso para usuario no registrado (acceso limitado a rutinas).

Recordatorio de contrasea mediante un e-mail.

Registro de un nuevo usuario.

Configuracin de las preferencias del sistema41.

o Direccin IP del servidor

o Cliente Gmail, puerto Gmail y token Gmail -> explicdas en 3.3.1 base
de datos

Modificacin de la informacin personal de los usuarios registrados.

Adems de esto, una vez se accede como usuario registrado o no registrado, se debe
poder:

41 Nueva funcionalidad implementada


80
Aplicacin del entrenado. acceso al servicio

Acceder a las rutinas de usuario (en caso de usuario registrado).

Acceder libremente a todas las rutinas (solo usuarios registrados).

Acceder a todos los ejercicios, para el tipo de rutina seleccionada.

El acceso a los ejercicios se podr realizar de dos formas diferentes:

Acceso detallado a cada uno de los ejercicios.

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:

Ver una descripcin

Ver la finalidad del ejercicio

Ver la duracin (nmero de series o repeticiones)

Acceder a la explicacin del ejercicio, caractersticas o recomendaciones.

Poder ver los tiles, si son necesarios, implicados en la realizacin del


ejercicio, tales como guantes, toalla, etc. Estos tiles aparecern en una lista
de tamao variable, donde al pulsar un elemento aparecer la foto del til.

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.

Por ltimo, un video explicativo del ejercicio, donde aparece simultneamente


la realizacin del ejercicio as como una explicacin.

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.

No entraremos en detalle para explicar la funcionalidad de cada recurso web. Para


ellos puede consultarse la siguiente referencia42. Nosotros solo explicaremos un caso de
manera detallada, ya que los dems son muy parecidos. Este caso ser la opcin de
guardar los nuevos parmetros de configuracin del sistema. Para el resto de casos,
nombraremos la URI que tendr la peticin HTTP correspondiente.

Adems, recordando que el funcionamiento que describe la aplicacin sigue el


mismo diagrama UML de las clases de nuestro proyecto comentado en los antecedentes,
se omitr la explicacin del uso de hilos y de listas variables, remitiendo al lector a dicha
referencia.

4.2 Pantalla de inicio

Al abrir la aplicacin y, no tener la direccin IP bien configurada, se mostrar el


siguiente Toast, como muestra la Figura 37. Tras este aviso, el Toast desaparecer y,
veremos todas las funcionalidades que se recogen en esta primera Activity.
Aprovechamos para presentar el tema de la interfaz de usuario que vamos a utilizar,
anteriormente nombrado como, holo.dark.

42 Subseccin 3.2.1 URIs y mtodos. Relacin


82
Aplicacin del entrenado. acceso al servicio

Figura 37. Inicio de aplicacin. IP incorrecta

El aspecto habitual de esta pantalla principal es el siguiente, como podemos ver


en la Figura 38.

Figura 38. Inicio de aplicacin

En esta pantalla inicial, el usuario podr realizar las siguientes acciones:

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.

Usaremos el botn de preferencias para hacer un explicacin detallada de cmo


se realiza la comunicacin en nuestro sistema. Para el resto de los casos, se procedera
de manera similar utilizando el resto de mtodos que estn asignados al resto de URIs.
Todos y cada uno de ellos reflejados en la Subseccin 3.2.1 URIs y mtodos. Relacin.

4.2.1 Botn de preferencias

Si pulsamos el botn de preferencias, pasaremos a la siguiente actividad donde


podremos modificar el valor de los diferentes campos, como se muestra en la Figura 39.

Cuando hayamos realizado las modificaciones pertinentes, pulsaremos el botn de


GUARDAR PREFERENCIAS.
84
Aplicacin del entrenado. acceso al servicio

Figura 39. Pantalla de ajuste de preferencias

En la aplicacin, se mostrar un dialogo, como indica la Figura 40. , para indicar que se
est realizando la configuracin.

Figura 40. Configuracin del sistema

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:

Tipo de peticin HTTP POST

Objeto JSON con:


Cliente Gmail
Parmetros
Puerto SMTP
Token Gmail
URI /configuracion

84
Tabla 5. Parmetros peticin /configuracin

Vamos a ver de una manera ms clara como se forma esta peticin:

Figura 41. Envio de peticin desde la aplicacin Android

Esto produce un objeto JSON con la siguiente estructura, que ser lo que llegar al
servicio web.

Figura 42. JSON que recibe el 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:

Figura 43. Mtodo que el servicio web ejecutar

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

Figura 44. Clase Configuracion.java

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:

Figura 45. Objeto Java, tras des-serializacin

Ahora mi servicio web podr acceder a estos valores como se muestra en la siguiente
figura:

43 Subseccin 2.12.2 Soporte de JSON

86
Figura 46. Extraccin de los campos del objeto Java

A continuacin, dentro del propio mtodo accederemos y almacenaremos estos campos


en la base de datos. Primero creamos un objeto que nos permita conectarnos a la base
de datos y prepararemos la sentencia SQL.

Figura 47. Mtodo Configuracin (I)

A continuacin, crearemos la conexin y comprobaremos si esta terna de parmetros ya


existe en nuestra base de datos. En cuyo caso no habr que modificar la entrada en la
base de datos y podremos contestar a nuestra aplicacin que ya estn almacenados.

Figura 48. Mtodo Configuracin (II)

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

Figura 49. Mtodo Configuracin (III)

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.

Figura 50. Mtodo Configuracin (IV)

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.

Figura 51. Mtodo Configuracin (V)

En caso de que ocurra algn error en el cierre de la conexin, informaremos al usuario.

Lo explicamos de forma ms grfica en la siguiente figura:

88
Servicio
BD
Web
MySQL

http://"+IP_server+"/path-raiz/configuracion
JSON Object:

- Busca el mtodo que tiene que ejecutar cuya URI


sea /configuracion
-

Des-serializa a objeto Java

INSERT INTO

Crea
entrada
en tabla

Respuesta

ResultSet que apunta a:

Respuesta:
- ok

Figura 52. Configuracin de las preferencias del sistema. Ejemplo


90
Aplicacin del entrenado. acceso al servicio

4.2.2 Botn de registro

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.

Se le permitir poner al usuario el nombre que desee, aunque en minscula,


porque as ser como se almacene en la base de datos. Se comprobar si existe otro
usuario con el mismo DNI, nmero de telfono, direccin de correo o nombre de usuario.
En cuyo caso, notificaremos al usuario para que elija otros valores para los respectivos
campos. Para ello, la peticin HTTP usar:

URI = /db + @QueryParam

o @QueryParam: Sern todos estos parmetros que no pueden


repetirse.

Adems de comprobar que ningn campo se encuentre en blanco, se comprobar


que el formato del DNI introducido es correcto.

Los campos que deber introducir para registrarse en el sistema se muestran en


la siguiente imagen.

Figura 53. Men registro

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

JSONObject, con todos los campos de informacin del usuario.

Tras dicha comprobacin y, en caso de que el DNI ya exista:

Figura 54. Registro con DNI existente

Si por el contrario no hay errores:

Figura 55. Registro con xito


92
Aplicacin del entrenado. acceso al servicio

4.2.3 Botn Login

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

JSONObject, con la dupla usuario-contrasea

Estas operaciones se realizan en segundo plano, mientras la pantalla muestra un


mensaje de Autenticando para evitar la impresin al usuario de que la aplicacin no
responde. Esto se consigue mediante el uso de hilos, y como resultado de dicha
autenticacin veremos lo que se muestras en la Figura 58.

En este caso

Figura 56. Introduccin parmetros Login

92
Figura 57. Login correcto

En caso de que no exista dicha dupla, se enviar un aviso al usuario indicando


que ha habido un error, Error: Nombre de usuario o password incorrecto.

Figura 58. Error login


94
Aplicacin del entrenado. acceso al servicio

4.2.4 Botn de recordatorio de contrasea

En el caso de que el usuario olvide la contrasea que introdujo cuando realiz el


registro, podr volver a recuperarl, usando dicha funcionalidad.

Se mostrar al usuario, en esta nueva interfaz, que introduzca el nombre de


usuario y su direccin de correo, como vemos a continuacin. Tras pulsar el botn de
ENVIAR CONTRASEA el usuario recibir la contrasea en su correo. Para ello, la
peticin HTTP utilizar:

URI = /recoverpass

JSONObject, con la direccin de correo y el nombre de usuario.

Figura 59. Envo de contrasea

Adems se obligar al usuario a introducir ambos campos, dado que si no los


introduce mostrar un mensaje de error, indicndole al usuario que debe introducirlos.
Cuando el usuario introduzca los datos y pulse dicho botn, el servicio web realizar una
gestin y mientras tanto la aplicacin mostrar al usuario un aviso para que no piense
que no responde.

94
Figura 60. Enviando contrasea

4.3 Pantalla de bienvenida usuario

Una vez el usuario accede al servicio, registrndose, aparecer una pantalla de


bienvenida con su nombre y, se le ofrece las distintas opciones:

Entrenar

Panel de control

Cerrar sesin

Ambas podemos verla en la siguiente figura:


96
Aplicacin del entrenado. acceso al servicio

Figura 61. Pantalla de bienvenida usuario registrado

4.3.1 Modificacin de datos

En este caso el usuario habr pulsado sobre el botn CONSULTAR/MODIFICAR


DATOS DE USUARIO. En este caso la peticin HTTP utilizar:

URI = /DatosUsuario + @QueryParam

o @QueryParam: Ser el nombre de usuario con el que realizar la


bsqueda en la base de datos.

Esta bsqueda y consulta de datos la har en segundo plano y mientras tanto se


mostrar al usuario el siguiente aviso Cargando datos.

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:

URI = /db + @QueryParam

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.

Tras esto, se mostrar un aviso al usuario indicando el estado de la operacin.

Figura 62. Datos modificados con xito

4.3.2 Cerrar sesin

Cuando el usuario pulsa cerrar sesin, automticamente saldr del servicio y


volver a la pantalla inicial. Pulsando dicho botn, ser la nica forma del volver al men
principal, ya que se ha bloqueado el funcionamiento del botn de atrs del terminal
mvil.
98
Aplicacin del entrenado. acceso al servicio

4.4 Entrenamiento

Cuando el usuario pulse el botn Entrenar, acceder al entrenamiento, el cual se


podr diferenciar en dos bloques

Entrenamiento personalizado

Entrenamiento libre

La principal diferencia es el tipo de entrenamiento a realizar, donde en el


entrenamiento personalizado el profesional ha asignado unas rutinas para el usuario en
concreto, teniendo en cuenta sus dolencias. Sin embargo, en el entrenamiento libre, el
usuario podr acceder a todas las rutinas de ejercicios con total libertad.

Esta situacin se representa con la siguiente figura:

Figura 63. Eleccin tipo de entrenamiento

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:

URI = /entrenamientolibre o /entrenamientopersonal + @QueryParam

98
o @QueryParam: nombre del usuario

A continuacin se proceder a describir que tipo de peticiones HTTP manejan


ambos tipos de entrenamiento.

4.4.1 Entrenamiento personalizado

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.

Figura 64. Lista de rutinas

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

Esta situacin queda reflejada en la siguiente imagen:

Figura 65. Eleccin en el tipo de entrenamiento a realizar

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:

URI = /rutinaelegida + @QueryParam

o @QueryParam: identificador de rutina elegida.

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.

4.4.1.1 Rutina mediante videos

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

Al pulsar algn elemento de la lista, se realizar una comunicacin con el servicio


web en segundo plano. sta tiene como finalidad obtener la url del ejercicio
seleccionado, la peticin HTTP utilizar:

URI = /listavideos + @QueryParam

o @QueryParam: Ser el identificador del ejercicio seleccionado

El resultado se muestra a continuacin:


102
Aplicacin del entrenado. acceso al servicio

Figura 67. Video explicativo de un ejercicio

4.4.1.2 Entrenamiento paso a paso

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

Al pulsar algn elemento de la lista, se realizar una comunicacin con el servicio


web en segundo plano. sta tiene como finalidad obtener la finalidad, descripcin y
duracin del ejercicio seleccionado, el resultado se mostrar en el siguiente apartado
4.4.1.3.

Por tanto, la peticin HTTP utilizar:

URI = /ejercicioelegido + @QueryParam

o @QueryParam: Ser el identificador del ejercicio seleccionado

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.

A continuacin se mostrar la interfaz que tiene esta nueva actividad.


104
Aplicacin del entrenado. acceso al servicio

Figura 69. Ejercicio

Recordemos qu aspectos deba tener el ejercicio para que el usuario ms


exigente pueda consultar desde la descripcin del ejercicio, la duracin, finalidad, as
como la consulta de recursos como fotos o videos. Estos son: descripcin, finalidad
duracin, explicacin, caractersticas, recomendaciones, tiles, msculos, fotos y video.

Teniendo en cuenta que el funcionamiento de la aplicacin est basado en el


proyecto que nos precede, lo que haremos en este apartado ser mostrar que tipo de
peticin HTTP se enva en cada uno de los casos y el resultado cmo queda nuestra
aplicacin despus de pulsar sobre cada uno de los diferentes botones que hemos
nombrado anteriormente, exceptuando: descripcin, finalidad y duracin, ya que era
informacin que provena de otra actividad.

Explicacin

o URI = /explicacionejercicio + @QueryParam

@QueryParam: Es el identificador del ejercicio.

104
Figura 70. Explicacin del ejercicio

Caractersticas

o URI = /caracteristicaejercicio + @QueryParam

@QueryParam: Es el identificador del ejercicio.

o Al tener el mismo carcter que la explicacin, la omitimos.

Recomendaciones

o URI = /recomendacionejercicio + @QueryParam

@QueryParam: Es el identificador del ejercicio.

o Al tener el mismo carcter que la explicacin, la omitimos.

tiles

o URI = /eligeutil + @QueryParam

@QueryParam: Es el identificador de ejercicio.


106
Aplicacin del entrenado. acceso al servicio

Figura 71. Lista de tiles

o URI = /cargafotoutil + @QueryParam

@QueryParam: Es el identificador del til seleccionado.

Figura 72. Foto de til

106
Msculos

o URI = /eligemusculo + @QueryParam

@QueryParam: Es el identificador de ejercicio.

o Al tener el mismo carcter que la lista de tiles, la omitimos.

o URI = /cargafotomusculo + @QueryParam

@QueryParam: Es el identificador del msculo seleccionado.

Figura 73. Foto del msculo cargado

Fotos

o URI = /cargafotos + @QueryParam

@QueryParam: Es el identificador de ejercicio.


108
Aplicacin del entrenado. acceso al servicio

Figura 74. Carga de tres fotos para mayor compresin

4.4.2 Entrenamiento libre

El entrenamiento libre conforma una extensin del entrenamiento personalizado.


Debido a que la nica diferencia existente entre ambos es la cantidad de datos
mostrados, no nos detendremos en su explicacin.

4.5 Usuario no registrado

Al usuario no registrado tambin se le da la posibilidad de entrenar, aunque tendr


unas limitaciones respecto a un usuario registrado. Como la aplicacin estaba enfocada
para un entrenamiento o rehabilitacin supervisada por un profesional, no tiene sentido
permitir a un usuario que permita hacer rutinas al azar, ya que esto podra ser perjudicial
para su recuperacin. Por ello, solo se le permite acceder a un nmero limitado de
rutinas, lo cual se avisa antes de acceder al sistema.

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.

El resto de funcionalidades es idntica a las explicadas en apartados anteriores.


110
Aplicacin del entrenado. acceso al servicio

110
5 CONCLUSIONES Y LNEAS FUTURAS

5.1 Lneas de continuacin del proyecto


5.1.1 Parte del entrenado

Empezamos esta seccin, recordando que el mbito en el cual se ha centrado


este proyecto es la parte del entrenado, permitiendo que ste realice una serie de
acciones dependiendo de si est registrado o no.

Por lo tanto, para un usuario registrado, se le facilita el entrenamiento o


rehabilitacin desde casa de manera personalizada gracias a que un profesional del
sector, como pudiera ser un mdico o un fisioterapeuta, le ha asignado previamente una
rutina de ejercicios.

Estos ejercicios tienen una serie de conceptos destacables, tales como la


definicin, caractersticas, recomendaciones, duracin, as como una serie de recursos
asignados. Estos recursos pueden ser fotos del ejercicio (posicin de inicio, posicin de
final y foto detalle) o vdeos donde se muestra el movimiento del ejercicio junto a su
explicacin.

Adems, se ha aadido una interfaz de usuario para la configuracin de las


preferencias del sistema, para que el usuario pueda modificar estos parmetros sin tener
que inspeccionar el cdigo fuente.

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.

Se podra implementar algn protocolo de seguridad sobre el propio servicio web


RESTful para que los datos sensibles no pudieran ser capturados y ledos con facilidad.

Adems, tambin se podra aadir un apartado donde el usuario apuntara sus


progresos y marcas personales mediante algn texto o formulario que se almacenara de
112
Conclusiones y lneas futuras

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.

5.1.2 Parte del entrenador

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

De manera general podra hacerse que nuestra aplicacin fuera multiplataforma,


implementndose en otros sistemas operativos tales como Windows Mobile o iOS.

5.2 Conclusiones
5.2.1 Tcnicas

Con la realizacin de este proyecto se pretende cubrir un nicho de mercado en


cuanto a lo que las aplicaciones deportivas se refieren.

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.

Esta aplicacin va ms all de innumerables aplicaciones con infinidad de rutinas


y ejercicios orientados nicamente a la potenciacin muscular o a la definicin. Intenta

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

Llegados a este punto y, haciendo una vista regresiva, se me vienen a la cabeza


muchos momentos que podra rescatar aqu.

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.

Otra conclusin ms personal y, que he ido comprobando estos aos es la famosa


curva de aprendizaje. Me explico, el hecho de que estas tecnologas ya no sean nuevas
para m, me hace ver la cantidad de tiempo que podra ahorrar en el futuro si me
encontrara con un problema similar.

Me gustara acabar, resaltando la figura de mi tutora Doa Mara Teresa Ariza


Gmez. Ella me ha dado libertad y, al mismo tiempo, me ha guiado por esta compleja
senda que es la realizacin de un proyecto. A ella, le doy las gracias por la dedicacin y
entrega que siempre me han brindado.
114
Conclusiones y lneas futuras

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

23. JSON in Java. [En lnea]. http://www.json.org/java/index.html


24. XML vs JSON. [En lnea]. http://magmax.org/blog/2010/7/20/xml-vs-json/

25. The Java EE 6 Tutorial. [En lnea]. http://docs.oracle.com/javaee/6/tutorial/doc/gilik.html


26. Uso de Android en Espaa. [En linea].
https://www.consumerbarometer.com/en/insights/?countryCode=ES
27. Desarrollo de Aplicaciones para la Plataforma Android. Un caso de estudio para el
intercambio de libros. [En lnea].
http://repositorio.bib.upct.es:8080/jspui/bitstream/10317/4055/1/pfc5762.pdf
28. Tutorial Wireshark.Uso de filtros. [En lnea]. https://geekytheory.com/tutorial-wireshark-
2-utilizacion-de-filtros/
29. Java Tutorial. [En lnea].
http://www.examclouds.com/questions/java/Web_Services/Support_for_Media_Type_in_Jer
sey
30. Proyecto Maven. [En lnea]. https://hop2croft.wordpress.com/2011/04/28/estructura-basica-
de-un-proyecto-con-maven/
31. Integracin de Maven en Eclipse. [En lnea]. http://aprendiendo-
software.blogspot.com.es/2012/11/como-integrar-maven-con-eclipse.html
32. Ventajas de Maven. [En lnea]. http://www.t3cnologic.com/blog/2014/02/27/que-es-maven-
que-ventajas-tiene-en-proyectos-java/
33. Encuesta sobre Equipamiento y Uso de Tecnologas de Informacin y Comunicacin en
los Hogares. [En lnea]. Ao 2014. http://www.ine.es/prensa/np864.pdf
34. Introduccin a JSON. [En lnea]. www.json.org/json-es.html
35. ADT Plugin | Android Developers. [En lnea].
http://developer.android.com/tools/sdk/eclipse-adt.html
36. Eclipse Downloads. [En lnea]. https://eclipse.org/downloads/
37. XAMPP. [En lnea]. https://www.apachefriends.org/es/index.html
38. Notepad++ Home. [En lnea]. https://notepad-plus-plus.org/
39. Apache, servidor. [En lnea]. http://www.apache.org/
40. Desarrolladores Android. [En lnea]. http://developer.android.com/index.html

116
ANEXO A: IMPACTO DE LA APLICACIN
1. Introduccin

En este primer anexo se va a realizar un estudio de impacto del posible lanzamiento


de nuestra aplicacin teniendo en cuenta a toda la sociedad espaola segn las edades.

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.

Figura 76. Porcentaje de la poblacin total que usa el smartphone. Ao 2014


118
Anexo A: Impacto de la aplicacin

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.

Como podemos apreciar gracias a Consumer Barometer by Google. Una herramienta


completa y gratuita para ayudar a comprender el uso que hace la gente de Internet en todo
el mundo. Google cre Consumer Barometer para ofrecer a anunciantes y agencias
informacin actualizada sobre el consumidor para ayudar en la planificacin en el entorno
digital, que cambiar de forma constante y a toda velocidad. La herramienta es gratuita y
permite crear y descargar datos personalizados e informacin sobre sectores especficos.
Con ella, podemos descubrir diversos tipos de informacin: el nmero de dispositivos con
conexin a Internet que tienen los usuarios, cmo compran online, la influencia de los videos
en sus hbitos de compra y muchas cosas ms.

Figura 77. Nmero medio de dispositivos conectados. Ao 2014

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.

Siendo un segmento de la poblacin ms activa en el uso del telfono mvil aquella en


la que suelen aparecen los primeros sntomas de problemas fsicos tales como:
lumbalgias, problemas en las articulaciones, sobrecargas musculares, etc., puede serle
til tener esta aplicacin, ya que dispone de un profesional tras de ella, velando por la
preparacin ms adecuada de una rutina de ejercicios para satisfacer la necesidad de
dicho usuario.

Sin olvidar el carcter de dicho entrenamiento, es decir, un entrenamiento a distancia,


bajan los costes del mismo, dado que facilitamos al fisioterapeuta o mdico la posibilidad
de preparar la recuperacin de varias personas de manera simultnea, simplemente
asignando una serie de rutinas de ejercicios para cada uno de los clientes. Dichas
rutinas, se encontrarn preestablecidas en la base de datos, la cuales constan de
diferentes tipos de ejercicios. De este modo, hacemos que un servicio, a priori, costoso,
sea ms accesible.
120
Anexo A: Impacto de la aplicacin

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.

Acabamos este apartado defendiendo que la aplicacin desarrollada permite a un


usuario acceder a rutinas de entrenamiento asignadas por el entrenador. Rutinas que
dispondrn de diferentes ejercicios los cuales el usuario realizar en su domicilio. Estas
rutinas estarn compuestas de ejercicios que, a su vez, tendrn una explicacin de cmo
realizarlos, imgenes de los msculos afectados en el ejercicio, nmero de repeticiones
que deben realizarse, imgenes con detalles del ejercicio as como un video explicativo
del mismo. Esos ejercicios pueden ser realizados por varios usuarios de manera
simultnea e independiente, no necesitndose una actuacin in situ del mdico,
fisioterapeuta o entrenador, dado que estas rutinas de entrenamiento fueron asignadas
previamente de manera remota. De esta manera, el usuario puede realizar la
recuperacin o entrenamiento a la hora que mejor se adapte a sus necesidades, no
siendo cautivo de horarios y facilitando su calidad de vida.

2.2 mbito del entrenador

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.

Personas que compraron por Internet en los ltimos 12


meses (%)
35%

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.

Si a este efecto le sumamos el crecimiento experimentado en las compras que se han


realizado por internet este ltimo ao, y la tendencia creciente que mantiene.
122
Anexo A: Impacto de la aplicacin

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

En este anexo se trata de explicar en base a un anlisis actual de la cuota de


mercado, el impacto positivo de seguir tomando como solucin vlida la eleccin de
Android como plataforma mvil en la que desarrollar nuestra aplicacin.

2. Cuota de Mercado actual

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.

Cuota de mercado de sistemas operativos


0,3 0,2
2,5
10,4

86,7

Android iOS BlackBerry Windows Otros

Figura 81. Cuota de mercado de los diferentes sistemas operativos mviles en Espaa. Enero 2015

2.1 nalisis de la tendencia

A continuacin, veremos la tendencia que ha seguido la cuota de mercado en el


ltimo ao en Espaa.
126
Anexo B: Estudio cuota de mercado

Cuota de mercado segn sistema operativo en Espaa (%)


100
90 86,3 86,7

80
70
60
50
40
30
20
10,4
7,3 5,5
10 2,5 0,9
0
Android iOS Windows Otros

De noviembre 2013 a enero 2014 De noviembre 2014 a enero 2015

Figura 82. Cuota de mercado segn SO en Espaa (%)

En el grfico anterior se puede contemplar la cuota de mercado de los diferentes


sistemas operativos mviles segn la consultora Kantar44 y su tendencia en el ltimo
ao.

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:

Creando un proyecto Maven.

Creando un proyecto web dinmico.

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.

Maven y REST modules. Ambos se pueden descargar desde el propio eclipse.

Comenzamos mostrando la estructura que tiene que tener un proyecto Maven. Y,


posteriormente pasaremos a enumerar los pasos necesarios para su creacin.

Figura 83. Estructura final de un proyecto Maven


128
Anexo C: Crear proyecto web

Luego los pasos que necesitaremos realizar son los siguientes:

1. New / Maven Project / Next.

2. Elegimos arquetipo maven-archetype-webapp, por tratarse de un servicio web.

3. Group Id: Nombre empresa - com.josvalbae.rest.

Artefact Id: Nombre de nuestro proyecto.

4. Finish.

5. Borramos index.jsp, debido a que no nos hace falta y puede dar error en algunas
versiones de eclipse.

6. New / Folder. Ver Figura 4.

7. New / Class. Donde vamos a desarrollar nuestro cdigo java.

8. Modificamos el fichero pom.xml. Ver Figura 5

a. Necesitaremos la librera de jersey de:

i. Servidor.

ii. Servlets.

iii. Core.

b. Ojo con la configuracin del web.xml.

c. Tenemos que aadir la versin de nuestro JDK. Ver figura 6.

9. Configuramos el web.xml. Ver Figura 7.

10. Corremos sobre el servidor Apache.

11. Abrimos el navegador y veremos el mensaje.

128
Figura 84. Jerarqua de carpetas
130
Anexo C: Crear proyecto web

Figura 85. Configuracin pom.xml

Figura 86. Configuracin pom.xml (2)

Figura 87. Configuracin web.xml

130
3. Proyecto web dinmico

Seguimos utilizando el mismo entorno de trabajo. Por lo que pasamos directamente a


dar los pasos sobre la creacin del proyecto web.

1. New / Dynamic web Project.

2. Elegimos mdulo 3.0.

3. Seleccionamos la opcin creating web.xml.

4. Configuramos el servlet, segn la versin de la API REST que estemos utilizando.


Ver Figura 8.

5. Aadimos las libreras a la carpeta WebContet/WEB-INF/lib.

6. Las seleccionamos todas y las aadimos al directorio de trabajo.

7. Creamos nuestro cdigo. Sobre el proyecto: Clic derecho / New class

8. Clic derecho / Run as / Sever

9. Siguiendo el siguiente formato, vemos si se ha desplegado el servicio.Ver figura


9.

a. En nuestro caso: http://localhost:8080/RESTfulExample/rest/hello/msg

Figura 88. Configuracion web.xml (2)


132
Anexo C: Crear proyecto web

Figura 89. Formato de la direccin de nuestro servicio web

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)

Apache Server Tomcat

Motorola Device Manager

1. Instalacin de XAMPP

En primer lugar, abriremos nuestro navegador e introduciremos la siguiente direccin


web, https://www.apachefriends.org/es/index.html, donde nos aparecer la siguiente
imagen:

Figura 90. Seleccin de la versin de XAMPP


134
Anexo D: Manual de instalacin

Seleccionamos la versin adecuada en funcin del sistema operativo donde vayamos a


instalarla. En nuestro caso, seleccionamos la versin para Windows.

Se nos abrir una segunda pestaa donde comenzar la descarga.

Figura 91. Descarga de XAMPP

Una vez descargada, comenzamos la instalacin ejecutando el instalador.

Figura 92. Instalador de XAMPP

134
Ahora, solo nos queda esperar que se ejecute el proceso de instalacin.

Figura 93. Instalacin de XAMPP. Paso 1

Pulsamos Next.

Figura 94. Instalacin de XAMPP. Paso 2


136
Anexo D: Manual de instalacin

Seleccionamos las opciones que vayamos a necesitar. No es necesario instalar todos


los componentes pues se traduce en un mayor tamao de instalacin innecesario. Tras
la seleccin, pulsamos Next.

Figura 95. Instalacin de XAMPP. Paso 3

Elegimos el directorio de instalacin y avanzamos.

Figura 96. Instalacin de XAMPP. Paso 4

136
Pulsamos Next.

Figura 97. Instalacin de XAMPP. Paso 5

Pulsamos Next y comenzar la instalacin.

Figura 98. Instalacin de XAMPP. Paso 6

Esperamos un par de minutos y ya estar listo para usarse.


138
Anexo D: Manual de instalacin

Figura 99. Instalacin de XAMPP. Paso 7

Ya ha finalizado la instalacin. Ahora, podemos abrir el programa y familiarizarnos con


el entorno.

Figura 100. Inicializacin de XAMPP

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

Para la instalacin de Eclipse, escribimos en el navegador la siguiente direccin web:


http://www.eclipse.org/downloads/, y seleccionamos la versin compatible con nuestro
sistema operativo, ya sea de 32 bits o 64 bits.

Figura 101. Seleccin de la versin de Eclipse

En nuestro caso, seleccionamos la opcin de 64 bits y esperamos que nos dejen


descargar desde el enlace de descarga disponible.

Figura 102. Seleccin de enlace de descarga de Eclipse

Pulsamos sobre Donwload y esperamos que comience la descarga.


140
Anexo D: Manual de instalacin

Figura 103. Inicio de la descarga de Eclipse

Una vez descargado el archivo .zip lo descomprimimos.

Figura 104. Descarga de Eclipse

Una vez est descomprimido en el directorio C:/, en mi caso, encontramos en el interior


todos los archivos necesarios para la ejecucin del programa.

140
Figura 105. Directorio de Eclipse

Para ms comodidad, podemos crear un acceso directo del ejecutable pulsando


botn derecho sobre la aplicacin eclipse->Enviar a->Escritorio (crear un acceso
directo).

Ahora, ejecutamos el programa. Si no tenemos instalado el JDK, nos aparecer


el siguiente error.

Figura 106. Error en Eclipse al no tener JDK instalado

Este error lo solucionaremos en el siguiente punto.


142
Anexo D: Manual de instalacin

3. Instalacin de JDK

En caso de no tener instalado el JDK, bastara con ir a la siguiente direccin web:


http://www.oracle.com/technetwork/java/javase/downloads/index.html

Figura 107. Instalacin del JDK

Seleccionamos Download sobre la opcin de JDK.

142
Figura 108. Seleccin de la versin del JDK

Aceptamos el acuerdo de licencia pulsando sobre Accept License Agreement y


seleccionamos la versin apropiada en funcin de la versin del sistema operativo que
tengamos instalado. En mi caso, selecciono la versin de 64 bits.
144
Anexo D: Manual de instalacin

Figura 109. JDK descargado

Ejecutamos el fichero descargado y comenzamos la instalacin.

Figura 110. Asistente de instalacin

Pulsamos Next.
144
Figura 111. Asistente de instalacin. Paso 1

Pulsamos Next.

Figura 112. Asistente de instalacin. Paso 2


146
Anexo D: Manual de instalacin

Figura 113. Asistente de instalacin. Paso 3

Elegimos el directorio de instalacin, pulsamos Siguiente y la instalacin comenzar.

Figura 114. Asistente de instalacin. Paso 4

Esperamos a que la instalacin termine.

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

En este caso, nos descargaremos la versin Stand-Alone, que posteriormente


necesitaremos vincular con Eclipse para poder usar ste como entorno de desarrollo de
nuestra aplicacin Android.

Figura 115. Android SDK

Tras la eleccin de la versin Stand-Alone, descargamos la versin compatible con


nuestro sistema operativo.

Figura 116. Eleccin de la plataforma correspondiente


148
Anexo D: Manual de instalacin

En nuestro caso, elegimos la versin installer_r24.3.3-windows.exe para Windows. Tras


dicha eleccin, slo nos quedar aceptar los trminos y condiciones para poder realizar
la descarga.

Figura 117. Trminos y condiciones sujetas a la descarga

Una vez realizada la descarga, procedemos a la instalacin, ejecutando el asistente de


instalacin con permisos de administrador.

Figura 118. Asistente de instalacin Android SDK. Paso 1

148
Pulsamos Next.

Figura 119. Asistente de instalacin Android SDK. Paso 2

Pulsamos Next.

Figura 120. Asistente de instalacin Android SDK. Paso 3


150
Anexo D: Manual de instalacin

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.

Figura 121. Asistente de instalacin Android SDK. Paso 4

Elegimos el directorio de instalacin 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.

Figura 123. Asistente de instalacin Android SDK. Paso 6


152
Anexo D: Manual de instalacin

La instalacin comenzar y, solo nos queda esperar que se complete.

Figura 124. Asistente de instalacin Android SDK. Paso 7

Llegados a este punto la instalacin se da por finalizada la instalacin. Ahora tenemos


que vincular las dos herramientas para poder desarrollar nuestra aplicacin Android en
eclipse.

4.1 Vinculacin de Android SDK y Eclipse

Partimos de que ya tenemos instalados correctamente Eclipse y Android SDK. Ahora


nos falta vincularlos, y eso lo haremos de la siguiente manera. Abriendo Eclipse nos
situamos sobre la barra de herramientas y buscamos la siguiente ruta: Help > Install
New Software.

Pulsamos sobre la opcin Add y modificamos ambos campos, como aparece en la


siguiente imagen.

152
Figura 125. Vinculacin Android SDK y Eclipse. Paso 1

La direccin web proviene de la pgina web para desarrolladores de Android:


http://developer.android.com/sdk/installing/installing-adt.html. Tras completar ambos
campos nos aparecer una opcin a instalar que har mencin a las herramientas de
desarrollador (Developer Tools) como se muestra a continuacin.

Figura 126. Vinculacin Android SDK y Eclipse. Paso 2

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

5. Instalacin de Apache Tomcat

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 .

Figura 127. Adicin del servidor Apache Tomcat a Eclipse. Paso 1

Aadimos un nuevo servidor (el descargado previamente), pulsando Add.

154
Figura 128. Adicin del servidor Apache Tomcat a Eclipse. Paso 2

Y lo configuramos en funcin de la versin del servidor que no hayamos descargado


anteriormente, en mi caso la versin 7. Pulsamos Next y procedemos a la
configuracin.
156
Anexo D: Manual de instalacin

Figura 129. Adicin del Servidor Apache Tomcat a Eclipse. Paso 3

Pulsamos Finish y nuestro servidor queda aadido a la lista de servidores a usar en


Eclipse.

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.

Adems de presentar cada familia concreta, se aadirn tambin el fichero de


configuracin AndroidManifest.xml y el fichero de recursos string.xml.

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:

listado.xml: Su funcin es cargar el fondo sobre el que ir la lista, la cual ser


rellanada con los elementos entrada.xml.

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

11. Familia Welcom2start


11.1 Welcom2start.java

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

12. Familia Lista_videos


12.1 Lista_videos.java

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

Al igual que en ListaActivity, Lista_videos no tiene un XML como el resto de familias,


sino que el suyo se compone de un par de XML, especificados a continuacin:

listado.xml: Su funcin es cargar el fondo sobre el que ir la lista, la cual ser


rellenada con los elementos entrada6.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

14. Familia Lista_ejercicios


14.1 Lista_ejercicios.java

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

Al igual que en ListaActivity, Lista_ejercicios no tiene un XML como el resto de familias,


sino que el suyo se compone de un par de XML, especificados a continuacin:

listado.xml: Su funcin es cargar el fondo sobre el que ir la lista, el cual ser


rellanada con los elementos entrada2.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

16. Familia Informacion


16.1 Informacion.java

244
16.2 informacion.xml
246
Anexo E: Cdigos Java y XML de la aplicacin Android

17. Familia Lista_util


17.1 Lista_util.java

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:

listado.xml: Su funcin es carga el fondo sobre el que ir la lista, la cual ser


rellenada con los elementos entrada3.xml

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

Al igual que en ListaActivity, Lista_musculo no tiene un XML como el resto de familias,


sino que el suyo se compone de un par de XML, especificados a continuacin:

listado.xml: Su funcin es cargar el fondo sobre el que ir la lista, la cual ser


rellenada con los elementos entrada4.xml.
260
Anexo E: Cdigos Java y XML de la aplicacin Android

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

20. Familia Fotomusculo


20.1 Fotomusculo.java

262
20.2 fotomusculo.xml
264
Anexo E: Cdigos Java y XML de la aplicacin Android

21. Familia Fotos


21.1 Fotos.java

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

ANEXO F: CDIGOS JAVA DEL WS

En este anexo se encuentran todos los cdigos java empleados en el desarrollo


del servicio web RESTful. Las diferentes clases Java utilizadas se presentarn
clasificadas en funcin del paquete al que pertenezcan. Adems, deberemos aadir dos
archivos XML claves en la realizacin de un proyecto Maven, para que ste soporte el
despliegue de un servicio web.

Dicha clasificacin, por paquetes, la mostramos a continuacin:

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

Вам также может понравиться