2012-07-02 12 views
48

Zajmuję się tworzeniem aplikacji na Androida, która przechowuje różne typy danych w wbudowanym świetle SQL dostarczanym przez platformę Android.Jak zsynchronizować bazę danych Android z internetowym serwerem SQL?

Wewnątrz aplikacji umieściłem przycisk "Sync", który ma zsynchronizować dane pomiędzy lokalną bazą danych SQL Light, a bazą danych Online SQL Server na moim serwerze.

Co to jest obejście tego problemu? Ta funkcja znajduje się w Kalendarzu Google, w którym możesz wyświetlać wydarzenia kalendarza na telefonie komórkowym, a po dodaniu nowego wydarzenia i synchronizacji danych możesz wyświetlić zaktualizowane dane, przechodząc do swojego konta online.

Uwaga: Nie chcę centralizować bazy danych w trybie online, ponieważ chcę również umożliwić użytkownikom mobilnym korzystanie z aplikacji bez połączenia z Internetem.

Dzięki.

+2

Napisz Webservice i uzyskaj zaktualizowane dane z usługi i zaktualizuj bazę danych sqllite ..vice versa –

+0

Użyłem PHP, aby napisać serwis internetowy w przeszłości. W zależności od implementacji możesz po prostu obniżyć nowe zdarzenia i umieścić je w db sqlite lub dodać/usunąć/modyfikować. Najlepszym/jedynym sposobem jest napisanie usługi sieciowej jako oprogramowania pośredniczącego do komunikacji między aplikacją a backendem! – javajavajava

+0

Czy synchronizujesz między sqllite a serwerem mysql? – morty346

Odpowiedz

60

Powinieneś rzucić okiem na projekt SampleSyncAdapter w demach Androida SDK (Transferring Data Using Sync Adapters). Pokazuje, jak wykonać synchronizację w stylu "Android", która nie wymaga interakcji użytkownika, przez ciągłe dotykanie przycisku synchronizacji.

Ponadto, należy napisać oprogramowanie serwera, które jest w stanie dostarczyć SyncAdapter "delta" wszystkich zmian od ostatniego zatwierdzenia. Najbardziej podstawowym podejściem jest przechowywanie w aplikacji "ostatniego zsynchronizowanego" znacznika czasu, który musi pochodzić z serwera, w przeciwnym razie może pojawić się problem z powodu różnic czasowych między klientem a serwerem. Normalizuj wszystkie znaczniki czasu jako GMT lub dowolną wybraną strefę czasową, ale pozostań przy tej decyzji. Jeśli aplikacja ma wyświetlać sygnaturę czasową w czasie lokalnym, do konwersji znormalizowanego znacznika czasu na czas lokalny należy użyć klas Java Calendar i TimeZone.

Twoja aplikacja musi również oznaczyć zmienione lokalne rekordy jako "brudne", aby Twój SyncAdapter wiedział, że musi przesłać zmienione lub nowe rekordy na serwer.

następujące minimalne cechy potrzebne są do oprogramowania serwera:

  • Aktualizacja istniejącego rekordu (ów) funkcja
  • Dodaj nowy rekord (y) funkcja
  • aktualizowane rekordy od ostatniej synchronizacji (aplikacja zapewnia czas Stempel)
  • Otrzymuj nowe rekordy od ostatniej synchronizacji (aplikacja zapewnia datownik)

Możesz również przeczytać niektóre API Google (np. Kalendarz Google), aby dowiedzieć się, jak to wszystko działa i jak zaprojektować interfejs API serwera do komunikacji.

+0

Doskonała odpowiedź! Wielkie dzięki. –

+6

[link do próbki] (http://developer.android.com/training/sync-adapters/index.html) – BRS

+1

@CodeZombie, dodano do pytania – naXa

Powiązane problemy