¿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.

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

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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.