1. Análisis y Diseño
de Software
Ejemplo
ListaCompra
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
http://moodle.dit.upm.es
2. Leyenda
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Ejemplo Lista de la Compra 2
3. Objetivos
● Aplicar los conceptos aprendidos en una
aplicación de ejemplo: una lista de la
compra
● Repaso
– Patrones Singleton / DAO
– AsyncTask
– Intenciones para pasar de una actividad a otra
Ejemplo Lista de la Compra 3
6. Producto
...
Genero (y reviso getters/setters,
constructor, equals(), toString()
Ejemplo Lista de la Compra 6
7. Repaso
Patrón de Diseño Singleton
● Una clase que tiene sólo un objeto
Ejemplo Lista de la Compra 7
8. Repaso
Patrón de Diseño DAO
● DAO (Data Access Object)
● Un DAO contiene una conexión a una base
de datos y sus operaciones básicas,
ocultando su implementación
● En nuestro caso, StatusData sigue el
patrón DAO del valor Status de Twitter
Ejemplo Lista de la Compra 8
9. En nuestro problema...
● Queremos tener sólo una lista... (singleton)
● Pero realmente queremos un DAO, si
siguiéramos con la aplicación, tendríamos
una base de datos de productos
● Vamos a seguir el patrón singleton, de
forma que esta clase sea la responsable de
devolvernos la lista, y de actualizarla
Ejemplo Lista de la Compra 9
11. DetalleProductoActivity
Programo clases privadas MiButtonSaveOnClickListener y
MiButtonCancelOnClickListener que implementan
View.OnClickLiistener, ahora mismo no hace nada.
Ejemplo Lista de la Compra 11
12. Repaso
Crear Lista Opciones
ListView para ver una lista
@android:id/list → layout
de Android para listas
@android:id/empty → si la
lista está vacía
Ejemplo Lista de la Compra 12
13. Repaso
Crear Lista opciones
ListActivity en vez
de Activity
Fuente de datos
Adaptador de lista,
simple_list_item_1
está predefinido
Listener de la
selección
Ejemplo Lista de la Compra 13
14. ListaCompraActivity
Conmuto a otra actividad
http://developer.android.com/reference/android/widget/ArrayAdapter.html
Ejemplo Lista de la Compra 14
18. Análisis...
● Ha funcionado que desde
ListaCompraActivity la intención me lleva
a DetalleProductoActivity...
● Tenemos ahora que procesar esa intención
para rellenar los campos
Ejemplo Lista de la Compra 18
21. Pruebo...
¡No cambia :(!
Ejemplo Lista de la Compra 21
22. Repaso
Ciclo vida de Actividad
Ejemplo Lista de la Compra 22
http://developer.android.com/reference/android/app/Activity.html
23. Repaso
Estados de actividad
● onCreate(Bundle saveInstanceState) - al
crearse
● onStart() - justo antes de que sea visible
● onResume() - es visible y 'se reactiva'
● onPause() - otra actividad va a tomar el
foco y ésta va a ser pausada
● onStop() - no es visible, está parada
● onDestroy() - se va a destruir
Ejemplo Lista de la Compra 23
25. Pruebo...
¡Cambia :)!
Ejemplo Lista de la Compra 25
26. Nueva funcionalidad
● Vamos a cargar las
ofertas del día
– Se conecta a varias
webs y tarda en
analizar las páginas
HTML (lo
simulamos)
● Y ordenar
alfabéticamente
Ejemplo Lista de la Compra 26
27. Usando AsyncTask
● Usar las hebras directamente es tedioso
● Android proporciona AsyncTask
– Permite crear una hebra de fondo que publica
en la hebra UI sin tener que programar
Threads o Handlers
– Definimos una tarea 'asíncrona' que se ejecuta
de fondo y publica sus resultados en la hebra
UI
Ejemplo Lista de la Compra 27
28. AsyncTask – Uso básico
● Hebras:UI Thread (UITh) y Background Thread
(BGTh, la AsyncTask)
●Tipos genéricos: Params, Progress, Result
● Estados principales
– onPreExecute (UITh)
– doInBackground (BGTh)
– onProgressUpdate(UITh)
– onPostExecutre(UITh)
● Método auxiliar
– publishProgress (BGTh)
Ejemplo Lista de la Compra 28
29. AsyncTask
● Una AsyncTask tiene 3 tipos genéricos
● AsyncTask<Params, Progress, Result>
– Params – tipo de parámetros enviados a la
tarea para su ejecución
– Progress – tipo de las unidades de progreso
publicadas durante su ejecución
– Result – resultado de la ejecución de la tarea
● Si no usamos un tipo, lo ponemos Void (con
V)
Ejemplo Lista de la Compra 29
30. Métodos de AsyncTask
● onPreExecute(): invocado por
UIth justo tras ejecutar la tarea
● doInBackground(Params) –
invocado por BGTh justo tras
onPreExecute
● onProgressUpdate(Progress) –
invocado por UITh tras una
llamada de BGTh a
publishProgress(Progress)
● onPostExecute(Result) invocado
por UITh justo tras terminar BGTh
Ejemplo Lista de la Compra 30
31. AsyncTask
● Puedo saber si está en funcionamiento con
el método getStatus()
Ejemplo Lista de la Compra 31
36. Análisis...
● Carga varias veces los mismos
productos...
● Permite conmutar al detalle aunque
hayamos lanzado la tarea (no es
necesariamente malo)
Ejemplo Lista de la Compra 36