SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
Mecanismos de
Persistencia en
Android
Javier Muñoz Ferrara
jmunoz@grupogimeno.com
http://twitter.com/jmunozf
http://www.linkedin.com/in/javiermf

Febrero 2014
La empresa

§  Holding familiar. 3ª Generación
§  Más de 30 empresas.
§  Con 2.500 empleados.
§  Presente en 9 Comunidades.
§  Dando servicio a más de 1 millón de
personas.

2
La empresa

GSC

3
La empresa
DEPARTAMENTO DE T.I.C.
28 personas

Área Software
Desarrollos a medidas en entornos
VB y Java
Proyectos de movilidad
Android
Web Responsive

Desarrollos Web:
Intranets corporativas
Extranets
Portales webs

Gestión Documental
Sist. de información Geográfica
(GIS)
SAP R3 – BI/BO

Área DataCenter y
Comunic.
Administración de servidores y
BBDD.
Virtualización de servidores
Gestión de comunicaciones y
radioenlaces/WIFI
Cloud privado - CPD propio (Tier
III)

Área de Microinf.

Mantenimiento integral
microinformático.
Asistencia remota
Soporte online

Auditorias del parque tecnológico.
Soporte de Helpdesk
Externalización de equipos de
impresión.
Venta de material informático

4
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Conceptos básicos

¿Qué es la persistencia?

Almacenar los datos de la aplicación
para que estén disponibles al reiniciar
el software
Conceptos básicos

¿Por qué es necesaria?

Las aplicaciones se reinician
La RAM es limitada
Conceptos básicos

¿Es importante?

La persistencia suele ser imprescindible
para el correcto funcionamiento de las
aplicaciones
Conceptos básicos

¿Es LO MÁS importante?

NO. Lo más importante son las reglas
de negocio de los usuarios/clientes

¿Entonces por qué muchas veces empezamos
diseñando e implementando la base de datos?
Conceptos básicos

¿Cómo persistir los datos?

Al usuario/cliente probablemente no le interese

BBDD Relacionales

Archivos Binarios

CSV
Servicios Web

Almacenamiento Cloud

BBDD NoSQL

XML
Conceptos básicos

¿Cómo persistir los datos?

¿Cómo podemos persistir en Android?
§  Preferencias
§ 

Parejas: clave -> valor

§ 

Configuraciones, recordar acciones, etc.

§  Almacenamiento de archivos
§ 

Almacenamiento interno o externo

§ 

Archivos arbitrarios (imágenes, json, xml, texto, binarios, etc.)

§  Datos estructurados
§ 

Base de datos SQL

§ 

Colecciones de datos estructurados y relacionados
Tipo de Persistencia

¿Cómo realizar la persistencia en móvil?

1.- Local
§  Almacenamiento en el propio móvil
§  Especio limitado. Acceso rápido. Alto coste consultas complejas
Tipo de Persistencia

¿Cómo realizar la persistencia en móvil?

2.- Remota en un servidor
§  El móvil sólo muestra datos, que lee de un servidor
§  Cada acceso a datos requiere un consulta
§  Alta latencia. Muy sensible a desconexiones
Tipo de Persistencia

¿Cómo realizar la persistencia en móvil?

3.- Mix (Cacheo/Hoarding)
§  Copia local de alguna información del servidor
§  Comunicación con el servidor para sincronizar
§  Funcional (más o menos) desconectado. Latencia según acierto.
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Retos

Espacio limitado

Almacenamiento local
§  Memoria interna/Memoria externa
§  Varios GB (no está mal)

Seleccionar datos a persistir
Retos

Computación y memoria limitada

Consultas complejas lentas
§  Mejor preprocesar datos en el servidor
§  Desnormalizar BBDD si es posible

Alto consumo de batería
Retos

Restricciones de comunicación

Dificultad para sincronizar
§  Minimizar número de conexiones
§  Sólo datos relevantes para la aplicación
§  Sólo modificaciones a los datos
§  Preprocesar datos
Retos

Desconexiones habituales

Modo off-line. ¿Qué ocurre?
§  No funciona nada
§  Funcionamiento limitado (sólo lectura)
§  Funcionamiento completo (conflictos)

Recuperación conexión
§  Sincronización de datos
§  Resolución de conflictos
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Diseño de la persistencia
El camino sin reflexionar
Diseñar y crear la BBDD
Escribir SQL donde haga falta leer o modificar datos
Utilizar cursores para recorrer los resultados

Con el paso del tiempo
¿Y si cambio el nombre o tipo de una columna?
¿Y si añado una tabla nueva?
¿Y si cambio BBDD local por servicios web externos?
Patron DAO

Data Access Object

Originario del ámbito J2EE
Aplicable a cualquier tipo de software OO
Patrón DAO

¿Qué es?

Interfaz con métodos de persistencia para Bussiness Objects
Independiente del mecanismo de persistencia (BBDD, XML, Servicios
Web, etc.)

Sólo entran y salen Bussiness Objects y tipos primitivos
Excepciones independientes de la persistencia
Patrón DAO

¿Qué es?

Entran y salen objetos, pero la lógica de la aplicación no
sabe cómo se guardan
Patrón DAO

Beneficios e Inconvenientes
Beneficios
Separación lógica aplicación y gestión persistencia
Evolución/Migración persistencia sin cambiar lógica aplicación
Centralización de las tareas de persistencia (mejor mantenimiento)

Inconvenientes
Capa extra quizá innecesaria en aplicaciones pequeñas
Mueve objetos enteros -> Sobrecarga (si no se diseña bien)
Dificulta integración con frameworks ActiveRecord u ORM
Patrón DAO

Estructura habitual

Un objeto DAO por Bussiness Object/Tabla
Métodos habituales en el interfaz
List<BO> getAll() / findAll()

BO getById(Long id) / findById(Long id)
insert(BO theObject)

delete(BO theObject)
update(BO theObject)

Y todos los que hagan falta….
Patrón DAO

Métodos Genéricos vs Métodos Específicos

Ejemplo: Aplicación tipo Google Calendar (vista calendario + vista detalle)
Métodos genéricos
List<Event> getAllEvents()

Event insertEvent(Event e)
Event updateEvent(Event e)

Métodos genéricos
List<Event> getAllEventsWithScheduleInfo()
updateScheduleInfo(long eventId, Date start, Date end)

Event insertEvent(String title, Date start, Date end)
Event getEventWithDetailnfo()
Event updateEvent(Event e)
¿Cómo cambiar de persistencia?

DAO permite varias persistencias. ¿Para qué?
Conectado vs Desconectado
Desarrollo vs Producción
Lite vs Premium
Conexión rápida vs Conexión lenta

¿Cómo cambiar entre persistencias?
UsuariosDAO usuariosDAO = new UsuariosSQliteDAO();

UsuariosDAO usuariosDAO = new UsuariosRESTDAO();

¡Disperso por toda la aplicación!
Patrón DAO

Abstract Factory Pattern

Factoría -> encargado de crear objetos
Agrupar y encapsular factorías individuales (una por DAO)
DAOFactory
getUsersDAO()
getProducsDAO()
<implementa>

SqliteDAOFactory
UserSqliteDAO
ProductsSqliteDAO

RestDAOFactory

getUsersDAO()
getProducsDAO()

getUsersDAO()
getProducsDAO()

UserRestDAO
ProductsRestDAO
Patrón DAO

Abstract Factory Pattern
DAOFactory
getUsersDAO()
getProducsDAO()
<implementa>

SqliteDAOFactory

RestDAOFactory

getUsersDAO()
getProducsDAO()

getUsersDAO()
getProducsDAO()

<delega en>

MyAppDAOFactory
getUsersDAO()
getProducsDAO()

<delega en>
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Android Annotations

¿Por qué utilizarlo?

Facilitar la legibilidad del código
Evitar escribir código boilerplate
Centrarse en la lógica de la aplicación

Ocultar la complejidad técnica
Android Annotations

¿Qué funcionalidad simplifica?

Inyección de dependencias
§ 

Obtener referencias a vistas, recursos, extras, etc.

Gestión de threads
§ 

UI vs Background

Listeners de eventos
§ 

No más clases anónimas

Cliente REST
§ 

Interacción con servicios WEB
Android Annotations

¿Cómo funciona?

Anotaciones Java
Generación automática de código boilerplate
Clases que extienden las de la aplicación

Necesario referencias las clases generadas
Android Annotations

Ejemplo
SQLite en Android

Conceptos básicos

Incluida en por defecto
Open Source → Utilizada en otros muchos proyectos
Ligera y embebida
BDs privadas de cada aplicación
Se almacenan en “/data/data/<package-name>/databases”

A tener en cuenta
No mantiene integridad de datos
No mantiene integridad referencial (foreign keys)
Se puede simular con triggers

Por defecto no tiene soporte completo a Unicode
No proporciona interfaz gráfica de administración
SQLite en Android

Implementación

Crear clase para administración:
Heredar de android.database.sqlite.SQLiteOpenHelper
Parámetros del constructor:
Contexto
Nombre de la DB
CursorFactory (null para utilizar el por defecto)
Versión del esquema de BBD (para tener en cuenta en migraciones)

Implementar métodos de construcción
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+tableName+" (_id INTEGER PRIMARY KEY , "+
colDeptName+ " TEXT)");
// More stuff including initial data
}
SQLite en Android

Implementación

Implementar método de migración
Parámetros del constructor:
oldVersion: versión de la bbdd en el dispositivo
newVersion: versión que se quiere alcanzar
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// do stuff
}

Desde la Actividad:
Crear instancia del DBOpenHelper
Conseguir DB
db.getWritableDatabase();
SQLite en Android

Interactuando con la BBDD

Consultas (Queries)
Modo “raw”:
SQLiteDatabase db=this.getReadableDatabase();
Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,"+colDeptName+" from
"+deptTable,new String [] {});

Modo “sencillo” (API)
SQLiteDatabase db=this.getReadableDatabase();
String [] columns=new String[]{"_id",colName,colAge,colDeptName};
Cursor c=db.query(viewEmps, columns, colDeptName+"=?",
new String[]{Dept}, null, null, null);
§ 
§ 
§ 

Nombre tabla
Columnas
Condición WHERE

§ 
§ 
§ 

Argumentos del WHERE
Cláusula GROUP BY
Clásula HAVING

§ 

Clásulula ORDER BY
SQLite en Android

Interactuando con la BBDD

Insertar fila
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put(“colDeptID”, 1);
cv.put(“colDeptName”, "Sales");
db.insert(deptTable, “colDeptID”, cv);
cv.put(“colDeptID”, 2);
cv.put(“colDeptName”, "IT");
db.insert(“tablename”, null, cv);
db.close();
SQLite en Android

Operaciones con Vectores

Puntero a un conjunto de datos
Resultado de una interacción con una BBDD

Operaciones de gestión:
close()
deactivate()
requery()

Operaciones de consulta:
getInt(int column_index)
getString(int column_index)
Etc.
getColumnIndex(String
ColumnName)

Operaciones de posición:
moveToNext()
moveToFirst()
moveToPosition(int pos)
moveToLast()
isFirst()
isLast()
isBeforeFirst()
isAfterLast()
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Object-Relational Mapping

¿Qué es un ORM?

Una técnica de programación para
convertir datos entre un sistema OO y un
sistema Relacional
Object-Relational Mapping

Impedancia Objeto-Relacional

Relacional
Tablas

Orientación a Objetos
Grafos
Object-Relational Mapping
Frameworks ORM

Gestionan la impedancia OO-Relacional
Aplican patrones estándar de correspondencia
OK para el 90% de la funcionalidad necesaria
Object-Relational Mapping
Algunas Recomendaciones

Loggea y lee las SQL que genera el ORM
Utiliza profiling para encontrar queries lentas
Añade los selects para recuperar sólo columnas necesarias
Utiliza raw SQL cuando el ORM complica las cosas
OrmLite
¿Qué es?

http://ormlite.com/
ORM básico para aplicaciones Java
Se integra con MySQL, PostgreSQL, SQL Server, SQLite…
Mapping por anotaciones
Generación dinámicas de DAOs básicos
OrmLite
Definició de las correspondiencias
@DatabaseTable(tableName = "samples")
public class SampleRow {
[…]
@DatabaseField(columnName = COLUMN_ID, id = true)
String id;
@DatabaseField(foreign = true, columnName = COLUMN_ROUTEPLANED)
RouteRow routeRowPlannedSample;
@DatabaseField(foreign = true, foreignAutoRefresh = true)
UserRow madeByRow;
@DatabaseField(foreign = true, foreignAutoRefresh = true)
UserRow takenByRow;
@DatabaseField(columnName = COLUMN_KIND)
SampleKind kind;
@DatabaseField(columnName = COLUMN_CITYNAME)
String cityName;
@DatabaseField(columnName = COLUMN_COMMENTSFORANALYST)
String comment;

@ForeignCollectionField(eager = false)
public ForeignCollection<SampleParameterRow> samplesParameters;
[…]
}
OrmLite
Manipular la BBDD

Instanciar el OpenHelper
Obtener un DAO para un tipo de objeto

@RootContext
Context ctxt;
Dao<SampleRow, Long> dbDAO;
@AfterInject
void initDbHelper() {
DatabaseHelper dbHelper = OpenHelperManager.getHelper(ctxt, DatabaseHelper.class);
try {
dbDAO = dbHelper.getDao(SampleRow.class);
}
catch (SQLException e) {
dbDAO = null;
}
}
OrmLite
Manipular la BBDD
Crear un objeto
SampleRow sampleRow = new SampleRow();
sampleRow.setCityName(“Zaragoza”);
[…]
dbDAO.create(sampleRow);

Actualizar un objeto
sampleRow.setCityName(“Huesca”);
dbDAO.update(sampleRow);

//debe tener id

Eliminar un objeto
dbDAO.delete(sampleRow);
// o también dbDAO.deleteById(sampleRow.getId());
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
Persistencia Cloud

¿Qué es?

Servicios de persistencia de manera remota
a través de Internet
Servicios Cloud
Ventajas e Inconvenientes

Ventajas
Evitar infraestructura sobredimensionada
Evitar costes de administración y mantenimiento
Distribuir costes en el tiempo
Soportar picos de necesidad

Inconvenientes
Problemas de privacidad y seguridad
Imposible adaptación/personalización
Difícil respuesta a fallos de servicio
Falta de estándares (vendor lock-in)
Persistencia Cloud
Ecosistema de Servicios

Acceso por SDK o API REST
Firebase Data (REST + SDK)

Parse Data (REST + SDK)
MongoDB (REST)

SimpleDB (REST + SDK)
Oracle (custom REST)
CouchDB (SDK)
NoSQL

¿Qué es?

Sistemas de almacenamiento de información que
no cumplen con el esquema entidad-relación

No hay consultas con SQL
No hay estructura fija
No hay JOINs
No garantizan ACID
(atomicidad, coherencia, aislamiento y durabilidad)
NoSQL
¿Por qué surge?

Aplicaciones Web Globales
- Grandes volúmenes
- Datos heterogéneos
- Rápida evolución de la estructura
- Acceso escalable

Nueva Infraestructura
- Grandes clústers
- Almacenamiento y computación cloud
NoSQL
¿Por qué surge?

Problemas de BBDD Relacionales
- No escalan bien en horizontal (distribución)
- Dificultan las evolución del esquema

Persistencia “Políglota”
- Distintas necesidades -> Distinto tipo de persistencia
- Encapsular para independizar

Datos muy estructurados
Volumen reducido
Acceso ocasional

Datos poco estructurados
Volumen muy grande
Acceso constante
Características NoSQL

Schema-less
Facilidades distribución
Consistencia ocasional
Características NoSQL
Principales tipos de BBDD NoSQL
Clave->Valor
- Como un map enorme
- Particionado sencillo por clave

Document Store
- Mapas anidados con listas
- Permiten “consultas” del contenido

Big Table
- Filas y columnas
- “Familias” de columnas dinámicas

BBDD Grafos
- Nodos, propiedades y aristas
- Permiten consultas complejas
NoSQL
Ventajas e Inconvenientes

Ventajas
Estructura adecuada para algunos datos
Mejor escalabilidad
Más flexibilidad de la estructura de datos

Inconvenientes
Aplicaciones más complejas
Falta de estandarización/formación
Integración estrategias persistencia
Parse
Conceptos Básicos

Parse Data
- Parte de suite de servicios para desarrollo de apps
- Notificaciones PUSH, Identificación, Analíticas…

Instalación
1.- Descargar JAR e incluir
2.- Inicializar librería

Parse.initialize(this, APP_CODE, API_KEY);!
Parse
Manipular datos

Guardar datos
ParseObject parseObject = new ParseObject("Note");!
parseObject.put("title",note.getTitle());!
parseObject.put("text",note.getText());!
parseObject.put("category",ParseObject.createWithoutData("Category",note.getCategory().getId()));!

!

Consultas
ParseQuery<ParseObject> query = ParseQuery.getQuery("Note"); !
for (ParseObject parseObject : query.find()) { …. }!
!

ParseObject parseObject = query.get(noteToEditId);!
Índice

¿Qué es persistencia?
Retos de la persistencia en móviles
¿Cómo diseñar la persistencia de datos?
Mecanismos de persistencia de datos en Android
SQLite
ORMLite
Parse
Servicios REST
REST

¿Qué es?

El Representational State Transfer (REST)
es un estilo arquitectónico para sistemas
software distribuidos basado en
RECURSOS
REST
¿Qué es?

Cliente <- Recurso -> Servidor

RECURSO
API
REST

BBDD

Aplicación
Software
REST

Recursos

Cualquier concepto con significado en la
aplicación que puede ser nombrado

FACTURA
CLIENTE
LUGAR

COMENTARIO
TIENDA
REST
Nombrado

Basado en URLs (Human readable)
http://example.com/customers/1234
http://example.com/orders/2007/10/776654/products
http://example.com/bills/4554/lines/6
recurso

Recomendaciones:
- No utilizar nombres de acción
-  Evitar parámetros (si es posible)
-  Denominación en plural

subrecurso
REST
Acciones

Acciones estándar definidas en HTTP
Comando
HTTP

Acción

Código
respuesta

Contenido respuesta

GET

Lectura

Código 200
(OK)

El recurso/s
consultado/s

POST

Creación

Código 201
(Created)

El recurso creado

PUT

Modificación

Código 200
(OK)

El recurso
modificado

DELETE

Eliminación

Código 204
(No content)

Nada
REST
Representación

Representación en texto del recurso (human-readable)
- JSON, XML, HTML, YAML, RSS, ATOM

JSON

XML
REST

Conexión HTTP manual
q  Leer un stream
String getURL = “http://nombredelservidor.com/services/clientes/”+clienteId;
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
is = conn.getInputStream();
JSONObject clienteJsonObject = new JSONObject(is.toString());
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(clienteJsonObject, Cliente.class);
REST

Con Android Annotations
q  Definir una interfaz
@Rest(rootUrl = "http://nombredelservidor.com/services/",converters =
{ MappingJacksonHttpMessageConverter.class })
public interface ClientesClient {
@Get(”clientes/{clientId}")
Client getClienteById(String clientId);
}
Mecanismos de Persistencia en Android

Conclusiones

La persistencia es un detalle (importante)
Varias opciones/tecnologías de implementación
Elija una, pero no hipoteques tu futuro
Mecanismos de Persistencia en Android

Javier Muñoz Ferrara
jmunoz@grupogimeno.com
http://twitter.com/jmunozf
http://www.linkedin.com/in/javiermf

Más contenido relacionado

La actualidad más candente

VLANs_Module_3.pptx
VLANs_Module_3.pptxVLANs_Module_3.pptx
VLANs_Module_3.pptxBOURY1
 
Frame Relay, Configuración de Frame Relay Básico.
Frame Relay, Configuración de Frame Relay Básico.Frame Relay, Configuración de Frame Relay Básico.
Frame Relay, Configuración de Frame Relay Básico.Anthony Torres Bastidas
 
Escaneo de puertos clase 2 complemento b 28 02-13
Escaneo de puertos clase 2 complemento b 28 02-13Escaneo de puertos clase 2 complemento b 28 02-13
Escaneo de puertos clase 2 complemento b 28 02-13Tensor
 
Integrated services digital network (isdn)
Integrated services digital network (isdn)Integrated services digital network (isdn)
Integrated services digital network (isdn)Gulu University
 
Enrutamiento entre vlan por medio de un Servidor Linux
Enrutamiento entre vlan por medio de un Servidor LinuxEnrutamiento entre vlan por medio de un Servidor Linux
Enrutamiento entre vlan por medio de un Servidor LinuxDerman Zepeda
 
Curso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: DialplanCurso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: DialplanIrontec
 
3.oeo000020 lte call drop diagnosis issue 1
3.oeo000020 lte call drop diagnosis issue 13.oeo000020 lte call drop diagnosis issue 1
3.oeo000020 lte call drop diagnosis issue 1Klajdi Husi
 
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Anthony Torres Bastidas
 
CCNA Introducing Networks
CCNA Introducing NetworksCCNA Introducing Networks
CCNA Introducing NetworksDsunte Wilson
 
Asynchronous transfer mode
Asynchronous transfer modeAsynchronous transfer mode
Asynchronous transfer modeVinil Patel
 
data-link layer protocols
data-link layer protocols  data-link layer protocols
data-link layer protocols BE Smârt
 

La actualidad más candente (20)

VLANs_Module_3.pptx
VLANs_Module_3.pptxVLANs_Module_3.pptx
VLANs_Module_3.pptx
 
Frame Relay, Configuración de Frame Relay Básico.
Frame Relay, Configuración de Frame Relay Básico.Frame Relay, Configuración de Frame Relay Básico.
Frame Relay, Configuración de Frame Relay Básico.
 
RPC - LLAMADAS REMOTAS
RPC - LLAMADAS REMOTASRPC - LLAMADAS REMOTAS
RPC - LLAMADAS REMOTAS
 
IP Routing Tutorial
IP Routing TutorialIP Routing Tutorial
IP Routing Tutorial
 
Protocolos de red
Protocolos de redProtocolos de red
Protocolos de red
 
Chapter13
Chapter13Chapter13
Chapter13
 
Escaneo de puertos clase 2 complemento b 28 02-13
Escaneo de puertos clase 2 complemento b 28 02-13Escaneo de puertos clase 2 complemento b 28 02-13
Escaneo de puertos clase 2 complemento b 28 02-13
 
Integrated services digital network (isdn)
Integrated services digital network (isdn)Integrated services digital network (isdn)
Integrated services digital network (isdn)
 
Enrutamiento entre vlan por medio de un Servidor Linux
Enrutamiento entre vlan por medio de un Servidor LinuxEnrutamiento entre vlan por medio de un Servidor Linux
Enrutamiento entre vlan por medio de un Servidor Linux
 
UMTS/LTE/EPC Call Flows for CSFB
UMTS/LTE/EPC Call Flows for CSFBUMTS/LTE/EPC Call Flows for CSFB
UMTS/LTE/EPC Call Flows for CSFB
 
Curso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: DialplanCurso de VoIP / Parte 03: Dialplan
Curso de VoIP / Parte 03: Dialplan
 
Frame Relay
Frame RelayFrame Relay
Frame Relay
 
Application layer : DNS
Application layer : DNSApplication layer : DNS
Application layer : DNS
 
3.oeo000020 lte call drop diagnosis issue 1
3.oeo000020 lte call drop diagnosis issue 13.oeo000020 lte call drop diagnosis issue 1
3.oeo000020 lte call drop diagnosis issue 1
 
Delay , Loss & Throughput
Delay , Loss & ThroughputDelay , Loss & Throughput
Delay , Loss & Throughput
 
TCP/IP(networking)
TCP/IP(networking)TCP/IP(networking)
TCP/IP(networking)
 
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
 
CCNA Introducing Networks
CCNA Introducing NetworksCCNA Introducing Networks
CCNA Introducing Networks
 
Asynchronous transfer mode
Asynchronous transfer modeAsynchronous transfer mode
Asynchronous transfer mode
 
data-link layer protocols
data-link layer protocols  data-link layer protocols
data-link layer protocols
 

Destacado

Android - Frameworks de Persistência
Android - Frameworks de PersistênciaAndroid - Frameworks de Persistência
Android - Frameworks de PersistênciaÉdipo Souza
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidAntonio Marin Neto
 
Descargar datos con JSON en Android
Descargar datos con JSON en AndroidDescargar datos con JSON en Android
Descargar datos con JSON en Android★ Raúl Laza
 
WFSpain Android App - Imágenes y persistencia
WFSpain Android App - Imágenes y persistenciaWFSpain Android App - Imágenes y persistencia
WFSpain Android App - Imágenes y persistenciaJorge Martín Espinosa
 
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOS
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOSPROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOS
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOSJacinto Cabrera Rodríguez
 
Importar Modulo Android
Importar Modulo AndroidImportar Modulo Android
Importar Modulo Android★ Raúl Laza
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datosCarlos Gustavo Ruiz
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)Carlos Gustavo Ruiz
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - IntroduçãoJoao Johanes
 
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...Adriel Café
 
Desenvolvimento móvel com Google Android
Desenvolvimento móvel com Google AndroidDesenvolvimento móvel com Google Android
Desenvolvimento móvel com Google AndroidCaelum
 
Arquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidArquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidEventos Creativos
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - PersistênciaArthur Emanuel
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJataiCaelum
 
Gestão de Projetos com MS-Project 2010
Gestão de Projetos com MS-Project 2010Gestão de Projetos com MS-Project 2010
Gestão de Projetos com MS-Project 2010Fabio Spanhol
 
Um exemplo do uso do SQLite: uma base de dados para alumni
Um exemplo do uso do SQLite: uma base de dados para alumniUm exemplo do uso do SQLite: uma base de dados para alumni
Um exemplo do uso do SQLite: uma base de dados para alumniLuis Borges Gouveia
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidFernando Anselmo
 
Project 2013 basico e conceitos 2015 oficial
Project 2013 basico e conceitos 2015   oficialProject 2013 basico e conceitos 2015   oficial
Project 2013 basico e conceitos 2015 oficialAlana Ramalho
 

Destacado (20)

Android - Frameworks de Persistência
Android - Frameworks de PersistênciaAndroid - Frameworks de Persistência
Android - Frameworks de Persistência
 
Persistencia de dados em aplicações Android
Persistencia de dados em aplicações AndroidPersistencia de dados em aplicações Android
Persistencia de dados em aplicações Android
 
JSON Android
JSON AndroidJSON Android
JSON Android
 
Descargar datos con JSON en Android
Descargar datos con JSON en AndroidDescargar datos con JSON en Android
Descargar datos con JSON en Android
 
WFSpain Android App - Imágenes y persistencia
WFSpain Android App - Imágenes y persistenciaWFSpain Android App - Imágenes y persistencia
WFSpain Android App - Imágenes y persistencia
 
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOS
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOSPROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOS
PROGRAMACIÓN ANDROID: MULTIMEDIA - LOS GRÁFICOS
 
Importar Modulo Android
Importar Modulo AndroidImportar Modulo Android
Importar Modulo Android
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datos
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
 
2 Informix Introduction
2 Informix Introduction2 Informix Introduction
2 Informix Introduction
 
Sqlite - Introdução
Sqlite - IntroduçãoSqlite - Introdução
Sqlite - Introdução
 
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...
FLISOL 2012 - Palestra "Introdução ao Desenvolvimento de Aplicações para o Si...
 
Desenvolvimento móvel com Google Android
Desenvolvimento móvel com Google AndroidDesenvolvimento móvel com Google Android
Desenvolvimento móvel com Google Android
 
Arquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidArquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en Android
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - Persistência
 
Google Android - WTJatai
Google Android - WTJataiGoogle Android - WTJatai
Google Android - WTJatai
 
Gestão de Projetos com MS-Project 2010
Gestão de Projetos com MS-Project 2010Gestão de Projetos com MS-Project 2010
Gestão de Projetos com MS-Project 2010
 
Um exemplo do uso do SQLite: uma base de dados para alumni
Um exemplo do uso do SQLite: uma base de dados para alumniUm exemplo do uso do SQLite: uma base de dados para alumni
Um exemplo do uso do SQLite: uma base de dados para alumni
 
Acessando Banco de Dados com o Android
Acessando Banco de Dados com o AndroidAcessando Banco de Dados com o Android
Acessando Banco de Dados com o Android
 
Project 2013 basico e conceitos 2015 oficial
Project 2013 basico e conceitos 2015   oficialProject 2013 basico e conceitos 2015   oficial
Project 2013 basico e conceitos 2015 oficial
 

Similar a Mecanismos de Persistencia en Android

20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWAB20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWABRicardo González
 
GWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la NubeGWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la NubeComunidad BDotNet
 
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012Desarrollo con control de código contra SQL Server | SolidQ Summit 2012
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012SolidQ
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web ServicesLuis Fernando Aguas Bucheli
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidasMarcos Soledispa
 
Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Rodrigo Zottola Pareja
 
Bases de datos introducción a las estructuras de datos.ppt
Bases de datos introducción a  las estructuras de datos.pptBases de datos introducción a  las estructuras de datos.ppt
Bases de datos introducción a las estructuras de datos.pptJuniorEscobar10
 
TENDENCIAS EN BASE DE DATOS II.pptx
TENDENCIAS EN BASE DE DATOS II.pptxTENDENCIAS EN BASE DE DATOS II.pptx
TENDENCIAS EN BASE DE DATOS II.pptxJpabloRodriguez1
 
Software Libre Y Escalabilidad
Software Libre Y EscalabilidadSoftware Libre Y Escalabilidad
Software Libre Y EscalabilidadGuille -bisho-
 
Unidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesUnidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesJuan Anaya
 
Act4 bd moreno_joel
Act4 bd moreno_joelAct4 bd moreno_joel
Act4 bd moreno_joeljoel28
 
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...michaeljr89
 

Similar a Mecanismos de Persistencia en Android (20)

Manejo persistencia
Manejo persistenciaManejo persistencia
Manejo persistencia
 
20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWAB20130329 Patrones de Aplicaciones para La nube #GWAB
20130329 Patrones de Aplicaciones para La nube #GWAB
 
GWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la NubeGWAB - Patrones para aplicaciones en la Nube
GWAB - Patrones para aplicaciones en la Nube
 
200405 - Aplicaciones Web
200405 - Aplicaciones Web200405 - Aplicaciones Web
200405 - Aplicaciones Web
 
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012Desarrollo con control de código contra SQL Server | SolidQ Summit 2012
Desarrollo con control de código contra SQL Server | SolidQ Summit 2012
 
Base de datos 2
Base de datos 2Base de datos 2
Base de datos 2
 
bases de datos
bases de datosbases de datos
bases de datos
 
Alvarado deber
Alvarado deberAlvarado deber
Alvarado deber
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidas
 
Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee Introduccion Aplicaciones Web en java j2ee
Introduccion Aplicaciones Web en java j2ee
 
Bases de datos introducción a las estructuras de datos.ppt
Bases de datos introducción a  las estructuras de datos.pptBases de datos introducción a  las estructuras de datos.ppt
Bases de datos introducción a las estructuras de datos.ppt
 
TENDENCIAS EN BASE DE DATOS II.pptx
TENDENCIAS EN BASE DE DATOS II.pptxTENDENCIAS EN BASE DE DATOS II.pptx
TENDENCIAS EN BASE DE DATOS II.pptx
 
Sistemas de base de datos ii
Sistemas de base de datos iiSistemas de base de datos ii
Sistemas de base de datos ii
 
Software Libre Y Escalabilidad
Software Libre Y EscalabilidadSoftware Libre Y Escalabilidad
Software Libre Y Escalabilidad
 
VSTS 2010
VSTS 2010VSTS 2010
VSTS 2010
 
Unidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móvilesUnidad 4: Administración de datos en dispositivos móviles
Unidad 4: Administración de datos en dispositivos móviles
 
DevOps: una breve introducción
DevOps: una breve introducciónDevOps: una breve introducción
DevOps: una breve introducción
 
Act4 bd moreno_joel
Act4 bd moreno_joelAct4 bd moreno_joel
Act4 bd moreno_joel
 
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...
Automatización de servicios en un restaurant-bar por medio de aplicaciones pa...
 

Más de Javier Muñoz

Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de AndroidJavier Muñoz
 
MOSKitt UIM (short description)
MOSKitt UIM (short description)MOSKitt UIM (short description)
MOSKitt UIM (short description)Javier Muñoz
 
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del SoftwareMOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del SoftwareJavier Muñoz
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittJavier Muñoz
 
MOSKitt Extensibility. Mutatis mutandis
MOSKitt Extensibility. Mutatis mutandisMOSKitt Extensibility. Mutatis mutandis
MOSKitt Extensibility. Mutatis mutandisJavier Muñoz
 
MOSKitt Transformations And Traceability
MOSKitt Transformations And TraceabilityMOSKitt Transformations And Traceability
MOSKitt Transformations And TraceabilityJavier Muñoz
 

Más de Javier Muñoz (6)

Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de Android
 
MOSKitt UIM (short description)
MOSKitt UIM (short description)MOSKitt UIM (short description)
MOSKitt UIM (short description)
 
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del SoftwareMOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
 
No más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKittNo más "programación copy&paste". Generación automática de código con MOSKitt
No más "programación copy&paste". Generación automática de código con MOSKitt
 
MOSKitt Extensibility. Mutatis mutandis
MOSKitt Extensibility. Mutatis mutandisMOSKitt Extensibility. Mutatis mutandis
MOSKitt Extensibility. Mutatis mutandis
 
MOSKitt Transformations And Traceability
MOSKitt Transformations And TraceabilityMOSKitt Transformations And Traceability
MOSKitt Transformations And Traceability
 

Último

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 

Último (20)

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 

Mecanismos de Persistencia en Android

  • 1. Mecanismos de Persistencia en Android Javier Muñoz Ferrara jmunoz@grupogimeno.com http://twitter.com/jmunozf http://www.linkedin.com/in/javiermf Febrero 2014
  • 2. La empresa §  Holding familiar. 3ª Generación §  Más de 30 empresas. §  Con 2.500 empleados. §  Presente en 9 Comunidades. §  Dando servicio a más de 1 millón de personas. 2
  • 4. La empresa DEPARTAMENTO DE T.I.C. 28 personas Área Software Desarrollos a medidas en entornos VB y Java Proyectos de movilidad Android Web Responsive Desarrollos Web: Intranets corporativas Extranets Portales webs Gestión Documental Sist. de información Geográfica (GIS) SAP R3 – BI/BO Área DataCenter y Comunic. Administración de servidores y BBDD. Virtualización de servidores Gestión de comunicaciones y radioenlaces/WIFI Cloud privado - CPD propio (Tier III) Área de Microinf. Mantenimiento integral microinformático. Asistencia remota Soporte online Auditorias del parque tecnológico. Soporte de Helpdesk Externalización de equipos de impresión. Venta de material informático 4
  • 5. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 6. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 7. Conceptos básicos ¿Qué es la persistencia? Almacenar los datos de la aplicación para que estén disponibles al reiniciar el software
  • 8. Conceptos básicos ¿Por qué es necesaria? Las aplicaciones se reinician La RAM es limitada
  • 9. Conceptos básicos ¿Es importante? La persistencia suele ser imprescindible para el correcto funcionamiento de las aplicaciones
  • 10. Conceptos básicos ¿Es LO MÁS importante? NO. Lo más importante son las reglas de negocio de los usuarios/clientes ¿Entonces por qué muchas veces empezamos diseñando e implementando la base de datos?
  • 11. Conceptos básicos ¿Cómo persistir los datos? Al usuario/cliente probablemente no le interese BBDD Relacionales Archivos Binarios CSV Servicios Web Almacenamiento Cloud BBDD NoSQL XML
  • 12. Conceptos básicos ¿Cómo persistir los datos? ¿Cómo podemos persistir en Android? §  Preferencias §  Parejas: clave -> valor §  Configuraciones, recordar acciones, etc. §  Almacenamiento de archivos §  Almacenamiento interno o externo §  Archivos arbitrarios (imágenes, json, xml, texto, binarios, etc.) §  Datos estructurados §  Base de datos SQL §  Colecciones de datos estructurados y relacionados
  • 13. Tipo de Persistencia ¿Cómo realizar la persistencia en móvil? 1.- Local §  Almacenamiento en el propio móvil §  Especio limitado. Acceso rápido. Alto coste consultas complejas
  • 14. Tipo de Persistencia ¿Cómo realizar la persistencia en móvil? 2.- Remota en un servidor §  El móvil sólo muestra datos, que lee de un servidor §  Cada acceso a datos requiere un consulta §  Alta latencia. Muy sensible a desconexiones
  • 15. Tipo de Persistencia ¿Cómo realizar la persistencia en móvil? 3.- Mix (Cacheo/Hoarding) §  Copia local de alguna información del servidor §  Comunicación con el servidor para sincronizar §  Funcional (más o menos) desconectado. Latencia según acierto.
  • 16. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 17. Retos Espacio limitado Almacenamiento local §  Memoria interna/Memoria externa §  Varios GB (no está mal) Seleccionar datos a persistir
  • 18. Retos Computación y memoria limitada Consultas complejas lentas §  Mejor preprocesar datos en el servidor §  Desnormalizar BBDD si es posible Alto consumo de batería
  • 19. Retos Restricciones de comunicación Dificultad para sincronizar §  Minimizar número de conexiones §  Sólo datos relevantes para la aplicación §  Sólo modificaciones a los datos §  Preprocesar datos
  • 20. Retos Desconexiones habituales Modo off-line. ¿Qué ocurre? §  No funciona nada §  Funcionamiento limitado (sólo lectura) §  Funcionamiento completo (conflictos) Recuperación conexión §  Sincronización de datos §  Resolución de conflictos
  • 21. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 22. Diseño de la persistencia El camino sin reflexionar Diseñar y crear la BBDD Escribir SQL donde haga falta leer o modificar datos Utilizar cursores para recorrer los resultados Con el paso del tiempo ¿Y si cambio el nombre o tipo de una columna? ¿Y si añado una tabla nueva? ¿Y si cambio BBDD local por servicios web externos?
  • 23. Patron DAO Data Access Object Originario del ámbito J2EE Aplicable a cualquier tipo de software OO
  • 24. Patrón DAO ¿Qué es? Interfaz con métodos de persistencia para Bussiness Objects Independiente del mecanismo de persistencia (BBDD, XML, Servicios Web, etc.) Sólo entran y salen Bussiness Objects y tipos primitivos Excepciones independientes de la persistencia
  • 25. Patrón DAO ¿Qué es? Entran y salen objetos, pero la lógica de la aplicación no sabe cómo se guardan
  • 26. Patrón DAO Beneficios e Inconvenientes Beneficios Separación lógica aplicación y gestión persistencia Evolución/Migración persistencia sin cambiar lógica aplicación Centralización de las tareas de persistencia (mejor mantenimiento) Inconvenientes Capa extra quizá innecesaria en aplicaciones pequeñas Mueve objetos enteros -> Sobrecarga (si no se diseña bien) Dificulta integración con frameworks ActiveRecord u ORM
  • 27. Patrón DAO Estructura habitual Un objeto DAO por Bussiness Object/Tabla Métodos habituales en el interfaz List<BO> getAll() / findAll() BO getById(Long id) / findById(Long id) insert(BO theObject) delete(BO theObject) update(BO theObject) Y todos los que hagan falta….
  • 28. Patrón DAO Métodos Genéricos vs Métodos Específicos Ejemplo: Aplicación tipo Google Calendar (vista calendario + vista detalle) Métodos genéricos List<Event> getAllEvents() Event insertEvent(Event e) Event updateEvent(Event e) Métodos genéricos List<Event> getAllEventsWithScheduleInfo() updateScheduleInfo(long eventId, Date start, Date end) Event insertEvent(String title, Date start, Date end) Event getEventWithDetailnfo() Event updateEvent(Event e)
  • 29. ¿Cómo cambiar de persistencia? DAO permite varias persistencias. ¿Para qué? Conectado vs Desconectado Desarrollo vs Producción Lite vs Premium Conexión rápida vs Conexión lenta ¿Cómo cambiar entre persistencias? UsuariosDAO usuariosDAO = new UsuariosSQliteDAO(); UsuariosDAO usuariosDAO = new UsuariosRESTDAO(); ¡Disperso por toda la aplicación!
  • 30. Patrón DAO Abstract Factory Pattern Factoría -> encargado de crear objetos Agrupar y encapsular factorías individuales (una por DAO) DAOFactory getUsersDAO() getProducsDAO() <implementa> SqliteDAOFactory UserSqliteDAO ProductsSqliteDAO RestDAOFactory getUsersDAO() getProducsDAO() getUsersDAO() getProducsDAO() UserRestDAO ProductsRestDAO
  • 31. Patrón DAO Abstract Factory Pattern DAOFactory getUsersDAO() getProducsDAO() <implementa> SqliteDAOFactory RestDAOFactory getUsersDAO() getProducsDAO() getUsersDAO() getProducsDAO() <delega en> MyAppDAOFactory getUsersDAO() getProducsDAO() <delega en>
  • 32. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 33. Android Annotations ¿Por qué utilizarlo? Facilitar la legibilidad del código Evitar escribir código boilerplate Centrarse en la lógica de la aplicación Ocultar la complejidad técnica
  • 34. Android Annotations ¿Qué funcionalidad simplifica? Inyección de dependencias §  Obtener referencias a vistas, recursos, extras, etc. Gestión de threads §  UI vs Background Listeners de eventos §  No más clases anónimas Cliente REST §  Interacción con servicios WEB
  • 35. Android Annotations ¿Cómo funciona? Anotaciones Java Generación automática de código boilerplate Clases que extienden las de la aplicación Necesario referencias las clases generadas
  • 37. SQLite en Android Conceptos básicos Incluida en por defecto Open Source → Utilizada en otros muchos proyectos Ligera y embebida BDs privadas de cada aplicación Se almacenan en “/data/data/<package-name>/databases” A tener en cuenta No mantiene integridad de datos No mantiene integridad referencial (foreign keys) Se puede simular con triggers Por defecto no tiene soporte completo a Unicode No proporciona interfaz gráfica de administración
  • 38. SQLite en Android Implementación Crear clase para administración: Heredar de android.database.sqlite.SQLiteOpenHelper Parámetros del constructor: Contexto Nombre de la DB CursorFactory (null para utilizar el por defecto) Versión del esquema de BBD (para tener en cuenta en migraciones) Implementar métodos de construcción public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE "+tableName+" (_id INTEGER PRIMARY KEY , "+ colDeptName+ " TEXT)"); // More stuff including initial data }
  • 39. SQLite en Android Implementación Implementar método de migración Parámetros del constructor: oldVersion: versión de la bbdd en el dispositivo newVersion: versión que se quiere alcanzar public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // do stuff } Desde la Actividad: Crear instancia del DBOpenHelper Conseguir DB db.getWritableDatabase();
  • 40. SQLite en Android Interactuando con la BBDD Consultas (Queries) Modo “raw”: SQLiteDatabase db=this.getReadableDatabase(); Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id,"+colDeptName+" from "+deptTable,new String [] {}); Modo “sencillo” (API) SQLiteDatabase db=this.getReadableDatabase(); String [] columns=new String[]{"_id",colName,colAge,colDeptName}; Cursor c=db.query(viewEmps, columns, colDeptName+"=?", new String[]{Dept}, null, null, null); §  §  §  Nombre tabla Columnas Condición WHERE §  §  §  Argumentos del WHERE Cláusula GROUP BY Clásula HAVING §  Clásulula ORDER BY
  • 41. SQLite en Android Interactuando con la BBDD Insertar fila SQLiteDatabase db=this.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put(“colDeptID”, 1); cv.put(“colDeptName”, "Sales"); db.insert(deptTable, “colDeptID”, cv); cv.put(“colDeptID”, 2); cv.put(“colDeptName”, "IT"); db.insert(“tablename”, null, cv); db.close();
  • 42. SQLite en Android Operaciones con Vectores Puntero a un conjunto de datos Resultado de una interacción con una BBDD Operaciones de gestión: close() deactivate() requery() Operaciones de consulta: getInt(int column_index) getString(int column_index) Etc. getColumnIndex(String ColumnName) Operaciones de posición: moveToNext() moveToFirst() moveToPosition(int pos) moveToLast() isFirst() isLast() isBeforeFirst() isAfterLast()
  • 43. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 44. Object-Relational Mapping ¿Qué es un ORM? Una técnica de programación para convertir datos entre un sistema OO y un sistema Relacional
  • 46. Object-Relational Mapping Frameworks ORM Gestionan la impedancia OO-Relacional Aplican patrones estándar de correspondencia OK para el 90% de la funcionalidad necesaria
  • 47. Object-Relational Mapping Algunas Recomendaciones Loggea y lee las SQL que genera el ORM Utiliza profiling para encontrar queries lentas Añade los selects para recuperar sólo columnas necesarias Utiliza raw SQL cuando el ORM complica las cosas
  • 48. OrmLite ¿Qué es? http://ormlite.com/ ORM básico para aplicaciones Java Se integra con MySQL, PostgreSQL, SQL Server, SQLite… Mapping por anotaciones Generación dinámicas de DAOs básicos
  • 49. OrmLite Definició de las correspondiencias @DatabaseTable(tableName = "samples") public class SampleRow { […] @DatabaseField(columnName = COLUMN_ID, id = true) String id; @DatabaseField(foreign = true, columnName = COLUMN_ROUTEPLANED) RouteRow routeRowPlannedSample; @DatabaseField(foreign = true, foreignAutoRefresh = true) UserRow madeByRow; @DatabaseField(foreign = true, foreignAutoRefresh = true) UserRow takenByRow; @DatabaseField(columnName = COLUMN_KIND) SampleKind kind; @DatabaseField(columnName = COLUMN_CITYNAME) String cityName; @DatabaseField(columnName = COLUMN_COMMENTSFORANALYST) String comment; @ForeignCollectionField(eager = false) public ForeignCollection<SampleParameterRow> samplesParameters; […] }
  • 50. OrmLite Manipular la BBDD Instanciar el OpenHelper Obtener un DAO para un tipo de objeto @RootContext Context ctxt; Dao<SampleRow, Long> dbDAO; @AfterInject void initDbHelper() { DatabaseHelper dbHelper = OpenHelperManager.getHelper(ctxt, DatabaseHelper.class); try { dbDAO = dbHelper.getDao(SampleRow.class); } catch (SQLException e) { dbDAO = null; } }
  • 51. OrmLite Manipular la BBDD Crear un objeto SampleRow sampleRow = new SampleRow(); sampleRow.setCityName(“Zaragoza”); […] dbDAO.create(sampleRow); Actualizar un objeto sampleRow.setCityName(“Huesca”); dbDAO.update(sampleRow); //debe tener id Eliminar un objeto dbDAO.delete(sampleRow); // o también dbDAO.deleteById(sampleRow.getId());
  • 52. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 53. Persistencia Cloud ¿Qué es? Servicios de persistencia de manera remota a través de Internet
  • 54. Servicios Cloud Ventajas e Inconvenientes Ventajas Evitar infraestructura sobredimensionada Evitar costes de administración y mantenimiento Distribuir costes en el tiempo Soportar picos de necesidad Inconvenientes Problemas de privacidad y seguridad Imposible adaptación/personalización Difícil respuesta a fallos de servicio Falta de estándares (vendor lock-in)
  • 55. Persistencia Cloud Ecosistema de Servicios Acceso por SDK o API REST Firebase Data (REST + SDK) Parse Data (REST + SDK) MongoDB (REST) SimpleDB (REST + SDK) Oracle (custom REST) CouchDB (SDK)
  • 56. NoSQL ¿Qué es? Sistemas de almacenamiento de información que no cumplen con el esquema entidad-relación No hay consultas con SQL No hay estructura fija No hay JOINs No garantizan ACID (atomicidad, coherencia, aislamiento y durabilidad)
  • 57. NoSQL ¿Por qué surge? Aplicaciones Web Globales - Grandes volúmenes - Datos heterogéneos - Rápida evolución de la estructura - Acceso escalable Nueva Infraestructura - Grandes clústers - Almacenamiento y computación cloud
  • 58. NoSQL ¿Por qué surge? Problemas de BBDD Relacionales - No escalan bien en horizontal (distribución) - Dificultan las evolución del esquema Persistencia “Políglota” - Distintas necesidades -> Distinto tipo de persistencia - Encapsular para independizar Datos muy estructurados Volumen reducido Acceso ocasional Datos poco estructurados Volumen muy grande Acceso constante
  • 60. Características NoSQL Principales tipos de BBDD NoSQL Clave->Valor - Como un map enorme - Particionado sencillo por clave Document Store - Mapas anidados con listas - Permiten “consultas” del contenido Big Table - Filas y columnas - “Familias” de columnas dinámicas BBDD Grafos - Nodos, propiedades y aristas - Permiten consultas complejas
  • 61. NoSQL Ventajas e Inconvenientes Ventajas Estructura adecuada para algunos datos Mejor escalabilidad Más flexibilidad de la estructura de datos Inconvenientes Aplicaciones más complejas Falta de estandarización/formación Integración estrategias persistencia
  • 62. Parse Conceptos Básicos Parse Data - Parte de suite de servicios para desarrollo de apps - Notificaciones PUSH, Identificación, Analíticas… Instalación 1.- Descargar JAR e incluir 2.- Inicializar librería Parse.initialize(this, APP_CODE, API_KEY);!
  • 63. Parse Manipular datos Guardar datos ParseObject parseObject = new ParseObject("Note");! parseObject.put("title",note.getTitle());! parseObject.put("text",note.getText());! parseObject.put("category",ParseObject.createWithoutData("Category",note.getCategory().getId()));! ! Consultas ParseQuery<ParseObject> query = ParseQuery.getQuery("Note"); ! for (ParseObject parseObject : query.find()) { …. }! ! ParseObject parseObject = query.get(noteToEditId);!
  • 64. Índice ¿Qué es persistencia? Retos de la persistencia en móviles ¿Cómo diseñar la persistencia de datos? Mecanismos de persistencia de datos en Android SQLite ORMLite Parse Servicios REST
  • 65. REST ¿Qué es? El Representational State Transfer (REST) es un estilo arquitectónico para sistemas software distribuidos basado en RECURSOS
  • 66. REST ¿Qué es? Cliente <- Recurso -> Servidor RECURSO API REST BBDD Aplicación Software
  • 67. REST Recursos Cualquier concepto con significado en la aplicación que puede ser nombrado FACTURA CLIENTE LUGAR COMENTARIO TIENDA
  • 68. REST Nombrado Basado en URLs (Human readable) http://example.com/customers/1234 http://example.com/orders/2007/10/776654/products http://example.com/bills/4554/lines/6 recurso Recomendaciones: - No utilizar nombres de acción -  Evitar parámetros (si es posible) -  Denominación en plural subrecurso
  • 69. REST Acciones Acciones estándar definidas en HTTP Comando HTTP Acción Código respuesta Contenido respuesta GET Lectura Código 200 (OK) El recurso/s consultado/s POST Creación Código 201 (Created) El recurso creado PUT Modificación Código 200 (OK) El recurso modificado DELETE Eliminación Código 204 (No content) Nada
  • 70. REST Representación Representación en texto del recurso (human-readable) - JSON, XML, HTML, YAML, RSS, ATOM JSON XML
  • 71. REST Conexión HTTP manual q  Leer un stream String getURL = “http://nombredelservidor.com/services/clientes/”+clienteId; URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000 /* milliseconds */); conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestMethod("GET"); conn.setDoInput(true); // Starts the query conn.connect(); int response = conn.getResponseCode(); is = conn.getInputStream(); JSONObject clienteJsonObject = new JSONObject(is.toString()); ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(clienteJsonObject, Cliente.class);
  • 72. REST Con Android Annotations q  Definir una interfaz @Rest(rootUrl = "http://nombredelservidor.com/services/",converters = { MappingJacksonHttpMessageConverter.class }) public interface ClientesClient { @Get(”clientes/{clientId}") Client getClienteById(String clientId); }
  • 73. Mecanismos de Persistencia en Android Conclusiones La persistencia es un detalle (importante) Varias opciones/tecnologías de implementación Elija una, pero no hipoteques tu futuro
  • 74. Mecanismos de Persistencia en Android Javier Muñoz Ferrara jmunoz@grupogimeno.com http://twitter.com/jmunozf http://www.linkedin.com/in/javiermf