Tema 5 ejemplo_lista_compra

Post on 13-Jun-2015

1.731 views 0 download

description

Ejemplo Lista de la compra

Transcript of 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 <cif@gsi.dit.upm.es>

EjemploListaCompra

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

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

Ejemplo Lista de la Compra 4

¿Qué vamos a hacer?

Ejemplo Lista de la Compra 5

Arquitectura

Ejemplo Lista de la Compra 6

Producto

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

Ejemplo Lista de la Compra 7

RepasoPatrón de Diseño Singleton

● Una clase que tiene sólo un objeto

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

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

Ejemplo Lista de la Compra 10

ListaSingleton

Ejemplo Lista de la Compra 11

DetalleProductoActivity

Programo clases privadas MiButtonSaveOnClickListener y MiButtonCancelOnClickListener que implementan View.OnClickLiistener, ahora mismo no hace nada.

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

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

Ejemplo Lista de la Compra 14

ListaCompraActivity

http://developer.android.com/reference/android/widget/ArrayAdapter.html

Conmuto a otra actividad

Ejemplo Lista de la Compra 15

Ejecutamos...

Ejemplo Lista de la Compra 16

Rellenamos...

Ejemplo Lista de la Compra 17

Probamos...

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

Ejemplo Lista de la Compra 19

DetalleProductoActivity (I)

Ejemplo Lista de la Compra 20

DetalleProductoActivity (II)

Ejemplo Lista de la Compra 21

Pruebo...

¡No cambia :(!

Ejemplo Lista de la Compra 22

Repaso Ciclo vida de Actividad

http://developer.android.com/reference/android/app/Activity.html

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

Ejemplo Lista de la Compra 24

ListaCompraActivity

Ejemplo Lista de la Compra 25

Pruebo...

¡Cambia :)!

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

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

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)

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)

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

Ejemplo Lista de la Compra 31

AsyncTask

● Puedo saber si está en funcionamiento con el método getStatus()

Ejemplo Lista de la Compra 32

ListCompraActivity

… métodos

Ejemplo Lista de la Compra 33

ActualizaCompraTask

Ejemplo Lista de la Compra 34

ActualizaCompraTask (I)

Ejemplo Lista de la Compra 35

ActualizaCompraTask (II)

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)