27

地理的に異なる場所のローカルSQLiteデータベースを維持するAndroidアプリがあります。

次に、そのデータベースを「クラウド」に接続して、次のことを実行します。

  • アプリが最初にインストールされたとき(または要求に応じて)、すべての初期ダウンロード

  • ローカルに追加された新しい場所は、クラウドにアップロードする必要があります(自動的に)

  • オンラインデータベースは、新しいオンラインエントリがないか時々チェックし、ローカルデータベースにダウンロードする必要があります。

私はこれを達成する上で多くの問題を抱えています。

1つ目は、単にそれを行う方法です。contentProvidersとsyncProvidersが関係していると思いますが、その方法は正確にはわかりません。SQLiteデータベースをcontentProviderに複製する必要がありますか、それとも、カスタムコンテンツプロバイダーを介さずにデータベースを直接使用するために、基盤となる設計に誤りがありますか?

次に、ロケーションレコードは、ID番号が競合するため、オンラインデータベースから単純に上下にコピーすることはできません。タグIDをロケーションIDに関連付ける「タグ」など、いくつかのリレーショナルテーブルがあります。私のタグIDは、必ずしも別のユーザーのタグIDと一致するとは限りません。ロケーションIDと同じです。したがって、転送にはいくつかのロジックが必要になります。 これはどこで/どのように適切に処理する必要がありますか?それはcontentResolverの役割ですか?(それが実際に何であるかわからない)

第三に、2人のユーザーが同時に同じ場所を追加した場合(おそらく説明と詳細が異なる場合)はどうなりますか? これらのレコードをマージするためのベストプラクティスはありますか?

最後に、オンラインコンポーネントを構築/ホストする最も簡単な方法は何ですか? この部分は私にとってまったく新しいものです。マスターデータベースをパブリックドロップボックスフォルダーに配置することはできますか、それともカスタムphp Webアプリを最初から作成する必要がありますか?または、この部分を簡単にするパッケージ済みのソリューションはありますか?

4

2 に答える 2

22

必ず and を使用ContentProviderしてSyncAdaptersください。あなたがすべき:

  • データベース機能をContentProviderインターフェイスでラップする
  • SyncServiceの権限に一致する設定ContentProvider
  • あなたのSyncAdapter専門分野では、オーバーライドしますonPerformSync()
  • ストレージを使用SharedPreferencesして、lastSync 時間などの同期パラメーターを追跡します。

    final SharedPreferences syncMeta =
                        mContext.getSharedPreferences("sync:" + account.name, 0);
    long lastSyncTime = syncMeta.getLong(LAST_SYNC, 0);
    long lastServerSyncTime = syncMeta.getLong(SERVER_LAST_SYNC, 0);
    
  • これにより、最初の同期であるかどうかが簡単にわかり、ここで最初の処理を行うことができます

  • 同期用のアルゴリズム、つまり一方向/双方向のアルゴリズムをここに記述します。
  • Android レコードにタイムスタンプとサーバー データベース ID を記録すると、同期に役立ちます。これは、マージ戦略に役立ちます。
  • DB 操作には、ここで ContentProvider を使用します。ContentProvider は、アプリや同期アダプターからデータにアクセスするための統一された方法を提供します。フレームワークとスケジュールが同期するように、システムに更新を通知します。また、必要に応じて、他のアプリへのデータのパブリック インターフェイスとしても役立ちます。

  • また、SyncService を使用することで、バッテリーを節約できます。システムはネットワーク ティックルを使用して同期操作を開始します。各アプリがシステムをウェイクアップするのではなく、すべてのアプリに対してそれらがまとめられている場合に最適です。

ついに、

見るべきサンプルが 2 つあります。彼らは私が説明したすべてをほとんどカバーしています

  1. ジャンプノート - http://code.google.com/p/jumpnote/source/browse/
  2. SampleSyncAdapter - http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

これらのアプリは両方とも、クラウド コンポーネントに Google App Engine を使用します。始めるのは簡単なので、そのオプションをぜひ検討してください。

于 2012-05-02T14:36:13.537 に答える
-1

最初に Android でローカル DB を作成します。そして、場所の詳細の詳細を保存します。保存後、クラウド/サーバーDBに送信します。

次に、ときどき、どのクラウド/サーバー DB を同期する必要がありますか。したがって、特定の間隔を取り、クラウド/サーバーDBと同期するように、Androidでサービスを記述します。

マージするため、テーブルにタイムスタンプを付けます。そのタイムスタンプを確認し、それに応じて更新します。

于 2012-05-02T14:40:38.437 に答える