2012-07-02 24 views
48

Sto sviluppando un'app Android che memorizza diversi tipi di dati nell'illuminazione SQL incorporata fornita dalla piattaforma Android.Come sincronizzare il database Android con un server SQL online?

All'interno dell'applicazione ho inserito un pulsante "Sincronizzazione" che dovrebbe sincronizzare i dati tra il database SQL Light locale, con un database di SQL Server online sul mio server.

Qual è la soluzione alternativa per gestire questo? Questa funzione è disponibile in Google Calendar, dove puoi visualizzare gli eventi del calendario sul tuo dispositivo mobile, e quando aggiungi un nuovo evento e sincronizzi i dati, puoi visualizzare i dati aggiornati anche sul tuo account online.

Nota: non voglio centralizzare il mio database online, perché voglio anche offrire agli utenti mobili la possibilità di utilizzare l'app senza connessione internet.

Grazie.

+2

Scrivere un servizio Web e ottenere dati aggiornati dal servizio e aggiornare il database sqllite ..vice versa –

+0

Ho usato PHP per scrivere un servizio web in passato. A seconda della tua implementazione potresti voler semplicemente buttare giù nuovi eventi e inserirli nel tuo db sqlite o aggiungere/eliminare/modificare. Il modo migliore/solo è di scrivere un webservice come middleware per comunicare tra l'applicazione e il backend! – javajavajava

+0

stai sincronizzando tra sqllite e un server mysql? – morty346

risposta

60

Si dovrebbe dare un'occhiata al progetto SampleSyncAdapter nelle demo di Android SDK (Transferring Data Using Sync Adapters). Mostra come eseguire la sincronizzazione "Stile Android", che non richiede interazione con l'utente toccando manualmente un pulsante di sincronizzazione tutto il tempo.

Inoltre, è necessario scrivere un software server in grado di fornire a SyncAdapter un "delta" di tutte le modifiche dall'ultimo commit. L'approccio più semplice consiste nel mantenere un timestamp "ultimo sincronizzato" nella tua app che deve provenire dal server, altrimenti potresti trovarti nei guai a causa delle differenze di tempo tra client e server. Normalizza tutti i timestamp come GMT o qualsiasi fuso orario a tua scelta, ma attenersi a tale decisione. Se l'app deve visualizzare un timestamp in ora locale, è necessario utilizzare la classe Java Calendar e TimeZone per convertire il timestamp normalizzato in ora locale.

L'app deve anche contrassegnare i record locali modificati come "sporchi", quindi SyncAdapter sa che è necessario caricare questi record modificati o nuovi sul server.

seguenti caratteristiche minime sono necessari per il software del server: la funzione

  • Aggiornare il record (s)
  • Aggiungi nuovo record funzione (s)
  • Get record aggiornati dall'ultima sincronizzazione (applicazione fornisce tempo timbro)
  • ottenere nuovi record dall'ultima sincronizzazione (applicazione fornisce timestamp)

Puoi anche leggere alcune API di Google (come Google Calendar) per avere un'idea di come funziona tutto questo e come progettare l'interfaccia API del server per la comunicazione.

+0

Risposta perfetta! Molte grazie. –

+6

[Un collegamento a un campione.] (Http://developer.android.com/training/sync-adapters/index.html) – BRS

+1

@CodeZombie, aggiunto alla domanda – naXa

Problemi correlati