tema 5 ejemplo_lista_compra

36
Análisis y Diseño de Software Departamento de Ingeniería de Sistemas Telemáticos http://moodle.dit.upm.es Carlos A. Iglesias <[email protected]> Ejemplo ListaCompra

Upload: carlos-a-iglesias

Post on 13-Jun-2015

1.733 views

Category:

Technology


0 download

DESCRIPTION

Ejemplo Lista de la compra

TRANSCRIPT

Page 1: Tema 5 ejemplo_lista_compra

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

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

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

Ejemplo Lista de la Compra 4

¿Qué vamos a hacer?

Page 5: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 5

Arquitectura

Page 6: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 6

Producto

...Genero (y reviso getters/setters, constructor, equals(), toString()

Page 7: Tema 5 ejemplo_lista_compra

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

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

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

Ejemplo Lista de la Compra 10

ListaSingleton

Page 11: Tema 5 ejemplo_lista_compra

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

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

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

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

Ejemplo Lista de la Compra 15

Ejecutamos...

Page 16: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 16

Rellenamos...

Page 17: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 17

Probamos...

Page 18: Tema 5 ejemplo_lista_compra

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

Ejemplo Lista de la Compra 19

DetalleProductoActivity (I)

Page 20: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 20

DetalleProductoActivity (II)

Page 21: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 21

Pruebo...

¡No cambia :(!

Page 22: Tema 5 ejemplo_lista_compra

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

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

Ejemplo Lista de la Compra 24

ListaCompraActivity

Page 25: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 25

Pruebo...

¡Cambia :)!

Page 26: Tema 5 ejemplo_lista_compra

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

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

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

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

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

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

Ejemplo Lista de la Compra 32

ListCompraActivity

… métodos

Page 33: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 33

ActualizaCompraTask

Page 34: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 34

ActualizaCompraTask (I)

Page 35: Tema 5 ejemplo_lista_compra

Ejemplo Lista de la Compra 35

ActualizaCompraTask (II)

Page 36: Tema 5 ejemplo_lista_compra

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)