web-dev-qa-db-ja.com

AndroidデータベースとオンラインSQL Serverを同期するには?

Android Platformが提供する組み込みのSQLiteにさまざまな種類のデータを保存するAndroidアプリを開発しています。

アプリ内に、ローカルのSQLiteデータベースとサーバー上のオンラインSQL Serverデータベースとの間でデータを同期することになっている「同期」ボタンを配置しました。

これを処理する回避策は何ですか?この機能はGoogleカレンダーにあり、モバイルでカレンダーのイベントを表示できます。新しいイベントを追加してデータを同期すると、オンラインアカウントに移動して更新されたデータを表示できます。

注:インターネットに接続しなくてもモバイルユーザーがアプリを使用できるようにしたいので、データベースをオンラインで一元化したくありません。

54
Wassim Taher

Android SDKデモ( 同期アダプタを使用したデータの転送 )のSampleSyncAdapterプロジェクトをご覧ください。同期 "Androidスタイル"、常に手動で同期ボタンをタップすることにより、ユーザーの操作を必要としません。

さらに、最後のコミット以降のすべての変更の「デルタ」をSyncAdapterに提供できるサーバーソフトウェアを作成する必要があります。最も基本的なアプローチは、サーバーから取得しなければならない「最後に同期された」タイムスタンプをアプリに保持することです。そうしないと、クライアントとサーバーの時間差のために問題が発生する可能性があります。すべてのタイムスタンプをGMTまたは選択した任意のタイムゾーンとして正規化しますが、その決定に固執します。アプリで現地時間でタイムスタンプを表示する必要がある場合は、Java CalendarおよびTimeZoneクラスを使用して、正規化されたタイムスタンプを現地時間に変換する必要があります。

アプリは、変更されたローカルレコードを「ダーティ」としてフラグする必要もあるため、SyncAdapterは、これらの変更されたレコードまたは新しいレコードをサーバーにアップロードする必要があることを認識します。

サーバーソフトウェアには、次の最小機能が必要です。

  • 既存のレコード機能を更新する
  • 新しいレコードを追加する機能
  • 最後の同期以降に更新されたレコードを取得します(アプリはタイムスタンプを提供します)
  • 最後の同期以降の新しいレコードを取得します(アプリはタイムスタンプを提供します)

また、これらすべてがどのように機能し、通信用のサーバーAPIインターフェースを設計する方法についてのアイデアを得るために、Google API(Google Calendarなど)を読むこともできます。

66
tiguchi