¿Qué clave principal se debe establecer en el db de Android local antes de sincronizarlo con el servidor?
Estoy haciendo una aplicación que tiene un modelo de base de datos:
Item (int id, String name, String description, Date updatedDate, boolean isSynced)
El id
del Item
es su clave principal (en local así como en el servidor) y el id
se genera automáticamente en el servidor mysql db. Estoy utilizando el reino para almacenar Items
en el dispositivo Android.
- AnimatorSet con setStartDelay llama a onAnimationStart
- Conectar la aplicación android con la base de datos de un sitio web
- ¿Cómo funciona la sincronización de Firebase con datos compartidos?
- Datos de sincronización de Android entre usuarios
- Detener tareas ejecutables de Handler al destruir actividad
El usuario puede crear y editar Items
en el dispositivo con o sin Internet. DB se sincroniza cuando hay conexión a Internet disponible.
Por lo tanto, cuando el usuario guarda un nuevo Item
, entonces qué id
debería guardarlo con en el db local para que la sincronización con el servidor no causa problemas
Ejemplo :
John tiene 3 Items
en su Moto X , así como Samsung S6 y ambos teléfonos se sincronizan con el servidor.
Pone Moto X en modo avión y añade un Item
en Samsung S6 que se sincroniza con el servidor.
Ahora, S6 tiene ítems con ids -> 1,2,3,4
Y Moto X tiene ítems con ids -> 1,2,3
Cuando Moto X se conecte a Internet, entonces descargará el Item
con id
= 4, pero todavía está en modo avión.
Mientras que Moto X sigue sin estar conectado, John agrega un Item
. ¿Qué id debo dar a este nuevo Item
en db local, para que no cause ningún problema cuando se sincroniza Moto X ? John debería ser capaz de editar este nuevo Item
en la Moto X sin conexión, por lo que no se puede mantener vacío.
Gracias
- Sincronización de datos entre sqlite y mysql android
- ¿Alguien implementó (o consiguió más información) en Android SyncObserver
- Cómo sincronizar datos entre la aplicación android y el servidor php?
- Sincronizar Android con una base de datos de sitio web?
Sólo escupir …
Agregue un int local_id
e int device_id
a la clase Item. Cada dispositivo que interactúa con el servidor obtendrá un device_id único y persistente. Cuando se crea un elemento en un dispositivo sin conexión a Internet, el dispositivo puede referirse al id local si el elemento necesita ser editado. Cuando el dispositivo está conectado y un elemento (! IsSynced && id == null), envíe el elemento a la base de datos para una operación de inserción y, a continuación, busque la clave principal de la fila de DB recién insertada buscando local_id y device_id. El valor de clave principal se devuelve al dispositivo y la clave principal del elemento en el servidor se establece como id
en la copia local de Item y se establece isSynced en true.
ETA: Al recuperar elementos del servidor db que se crearon en otros dispositivos, necesitaría omitir el local_id
al colocar estos elementos en la tabla del dispositivo.
ETA2: Y usted tendría que cambiar la configuración de la tabla en sus dispositivos de modo que local_id
era la clave primaria y el id
era ÚNICO. Pero, por supuesto, id
sigue siendo la clave principal en la tabla en el servidor db.