tema 5 ejemplo_lista_compra
DESCRIPTION
Ejemplo Lista de la compraTRANSCRIPT
![Page 1: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/1.jpg)
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
Carlos A. Iglesias <[email protected]>
EjemploListaCompra
![Page 2: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/2.jpg)
Ejemplo Lista de la Compra 2
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Leyenda
![Page 3: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/3.jpg)
Ejemplo Lista de la Compra 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
![Page 4: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/4.jpg)
Ejemplo Lista de la Compra 4
¿Qué vamos a hacer?
![Page 5: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/5.jpg)
Ejemplo Lista de la Compra 5
Arquitectura
![Page 6: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/6.jpg)
Ejemplo Lista de la Compra 6
Producto
...Genero (y reviso getters/setters, constructor, equals(), toString()
![Page 7: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/7.jpg)
Ejemplo Lista de la Compra 7
RepasoPatrón de Diseño Singleton
● Una clase que tiene sólo un objeto
![Page 8: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/8.jpg)
Ejemplo Lista de la Compra 8
RepasoPatró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
![Page 9: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/9.jpg)
Ejemplo Lista de la Compra 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
![Page 10: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/10.jpg)
Ejemplo Lista de la Compra 10
ListaSingleton
![Page 11: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/11.jpg)
Ejemplo Lista de la Compra 11
DetalleProductoActivity
Programo clases privadas MiButtonSaveOnClickListener y MiButtonCancelOnClickListener que implementan View.OnClickLiistener, ahora mismo no hace nada.
![Page 12: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/12.jpg)
Ejemplo Lista de la Compra 12
RepasoCrear Lista Opciones
ListView para ver una lista@android:id/list → layout
de Android para listas
@android:id/empty → si la lista está vacía
![Page 13: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/13.jpg)
Ejemplo Lista de la Compra 13
RepasoCrear Lista opciones
ListActivity en vez de Activity
Fuente de datos
Adaptador de lista, simple_list_item_1
está predefinido
Listener de la selección
![Page 14: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/14.jpg)
Ejemplo Lista de la Compra 14
ListaCompraActivity
http://developer.android.com/reference/android/widget/ArrayAdapter.html
Conmuto a otra actividad
![Page 15: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/15.jpg)
Ejemplo Lista de la Compra 15
Ejecutamos...
![Page 16: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/16.jpg)
Ejemplo Lista de la Compra 16
Rellenamos...
![Page 17: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/17.jpg)
Ejemplo Lista de la Compra 17
Probamos...
![Page 18: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/18.jpg)
Ejemplo Lista de la Compra 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
![Page 19: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/19.jpg)
Ejemplo Lista de la Compra 19
DetalleProductoActivity (I)
![Page 20: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/20.jpg)
Ejemplo Lista de la Compra 20
DetalleProductoActivity (II)
![Page 21: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/21.jpg)
Ejemplo Lista de la Compra 21
Pruebo...
¡No cambia :(!
![Page 22: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/22.jpg)
Ejemplo Lista de la Compra 22
Repaso Ciclo vida de Actividad
http://developer.android.com/reference/android/app/Activity.html
![Page 23: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/23.jpg)
Ejemplo Lista de la Compra 23
RepasoEstados 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
![Page 24: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/24.jpg)
Ejemplo Lista de la Compra 24
ListaCompraActivity
![Page 25: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/25.jpg)
Ejemplo Lista de la Compra 25
Pruebo...
¡Cambia :)!
![Page 26: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/26.jpg)
Ejemplo Lista de la Compra 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
![Page 27: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/27.jpg)
Ejemplo Lista de la Compra 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
![Page 28: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/28.jpg)
Ejemplo Lista de la Compra 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)
![Page 29: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/29.jpg)
Ejemplo Lista de la Compra 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)
![Page 30: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/30.jpg)
Ejemplo Lista de la Compra 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
![Page 31: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/31.jpg)
Ejemplo Lista de la Compra 31
AsyncTask
● Puedo saber si está en funcionamiento con el método getStatus()
![Page 32: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/32.jpg)
Ejemplo Lista de la Compra 32
ListCompraActivity
… métodos
![Page 33: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/33.jpg)
Ejemplo Lista de la Compra 33
ActualizaCompraTask
![Page 34: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/34.jpg)
Ejemplo Lista de la Compra 34
ActualizaCompraTask (I)
![Page 35: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/35.jpg)
Ejemplo Lista de la Compra 35
ActualizaCompraTask (II)
![Page 36: Tema 5 ejemplo_lista_compra](https://reader033.vdocuments.pub/reader033/viewer/2022052904/557b555dd8b42a1f1a8b472b/html5/thumbnails/36.jpg)
Ejemplo Lista de la Compra 36
Análisis...
● Carga varias veces los mismos productos...
● Permite conmutar al detalle aunque hayamos lanzado la tarea (no es necesariamente malo)