56

Android プラットフォームが提供する組み込みの SQLite にさまざまな種類のデータを格納する Android アプリを開発しています。

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

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

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

4

1 に答える 1

67

Android SDK デモ (同期アダプターを使用したデータの転送) で SampleSyncAdapter プロジェクトを確認する必要があります。常に同期ボタンを手動でタップすることにより、ユーザーの操作を必要としない「Android スタイル」の同期を行う方法を示します。

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

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

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

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

また、これらすべてがどのように機能するか、および通信用のサーバー API インターフェイスを設計する方法を理解するために、いくつかの Google API (Google カレンダーなど) を読みたいと思うかもしれません。

于 2012-07-02T19:02:38.080 に答える