2012-07-02 7 views
48

Ich entwickle eine Android-App, die verschiedene Arten von Daten in der integrierten SQL-Light von der Android-Plattform gespeichert speichert.Wie Synchronisieren Android Database mit einem Online-SQL Server?

In der App habe ich einen "Sync" -Button platziert, der die Daten zwischen der lokalen SQL-Light-Datenbank mit einer Online-SQL-Server-Datenbank auf meinem Server synchronisieren soll.

Was ist die Problemumgehung, um damit umzugehen? Diese Funktion finden Sie in Google Kalender. Dort können Sie die Ereignisse des Kalenders auf Ihrem Mobiltelefon anzeigen. Wenn Sie ein neues Ereignis hinzufügen und die Daten synchronisieren, können Sie die aktualisierten Daten auch in Ihrem Online-Konto anzeigen.

Hinweis: Ich möchte meine Datenbank nicht online zentralisieren, da ich den mobilen Benutzern auch die Möglichkeit geben möchte, die App ohne Internetverbindung zu verwenden.

Danke.

+2

Schreiben Sie einen Webservice und erhalten Sie aktualisierte Daten vom Service und aktualisieren Sie Ihre SQLLite-Datenbank ..Vice versa –

+0

Ich habe PHP verwendet, um einen Webservice in der Vergangenheit zu schreiben. Abhängig von Ihrer Implementierung möchten Sie vielleicht nur neue Ereignisse herunterfahren und sie in Ihre sqlite db einfügen oder hinzufügen/löschen/ändern. Der beste/einzige Weg ist jedoch, einen Webservice als Middleware zu schreiben, um zwischen Ihrer Anwendung und dem Backend zu kommunizieren! – javajavajava

+0

Synchronisieren Sie zwischen SQLITE und einem MySQL-Server? – morty346

Antwort

60

Sie sollten sich das SampleSyncAdapter-Projekt in den Android SDK-Demos ansehen (Transferring Data Using Sync Adapters). Es zeigt Ihnen, wie Sie die Synchronisierung "Android style" durchführen, die keine Benutzerinteraktion erfordert, indem Sie ständig manuell auf eine Synchronisierungsschaltfläche tippen.

Darüber hinaus müssen Sie Server-Software schreiben, die Ihren SyncAdapter mit einem "Delta" aller Änderungen seit dem letzten Commit versorgen kann. Der einfachste Ansatz besteht darin, in Ihrer App einen "letzten synchronisierten" Zeitstempel zu speichern, der vom Server kommen muss. Andernfalls könnten Sie aufgrund von Zeitunterschieden zwischen Client und Server in Schwierigkeiten geraten. Normalisieren Sie alle Zeitstempel als GMT oder eine beliebige Zeitzone Ihrer Wahl, aber bleiben Sie bei dieser Entscheidung. Wenn Ihre App einen Zeitstempel in lokaler Zeit anzeigen muss, müssen Sie den Java-Kalender und die TimeZone-Klasse zum Konvertieren des normalisierten Zeitstempels in die lokale Zeit verwenden.

Ihre App muss geänderte lokale Datensätze auch als "fehlerhaft" kennzeichnen, damit Ihr SyncAdapter weiß, dass er diese geänderten oder neuen Datensätze auf den Server hochladen muss.

Mindest Funktionen Im Folgenden werden für die Server-Software benötigt:

  • aktualisieren vorhandenen Datensatz (n) Funktion
  • Hinzufügen neuer Rekord (n) Funktion
  • aktualisierten Datensätze Erhalten Sie seit der letzten Synchronisation (app Zeit bietet Stempel)
  • neue Datensätze seit der letzten Synchronisation (app Zeitstempel liefert)

Sie können auch eine Google API (wie Google Kalender) lesen, um sich ein Bild davon zu machen, wie all dies funktioniert und wie Sie die Server-API-Schnittstelle für die Kommunikation gestalten.

+0

Perfekte Antwort! Danke vielmals. –

+6

[Ein Link zu einem Beispiel.] (Http://developer.android.com/training/sync-adapters/index.html) – BRS

+1

@CodeZombie, zu der Frage hinzugefügt – naXa

Verwandte Themen