27

さまざまな地理的な場所のローカルSQLiteデータベースを管理するアンドロイドアプリがあります。ユーザー間のAndroid同期データ

今、私は次のことを達成するために、「クラウド」にそのデータベースを接続したいと思います:

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

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

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

私はこれを達成するために多くの問題があります。

最初は単純にです。です。私はそれがcontentProvidersとsyncProvidersを含んでいると思うが、私はどのように正確にはわからない。 contentProviderでSQLiteデータベースを複製する必要がありますか、またはカスタムコンテンツプロバイダではなく、データベースを直接使用するために基礎となる設計で間違いを犯しましたか?

第2に、ロケーションレコードは、競合するID番号を持つため、オンラインデータベースから単純に上下にコピーすることはできません。私は、tag-idとlocation-idを関連付ける "tags"のようないくつかのリレーショナルテーブルを持っています。私のタグIDは必ずしも他のユーザータグIDと一致するとは限りません。ロケーションIDと同じです。したがって、転送にはいくつかのロジックが必要になります。 /これはどのように正しく処理されるべきですか?それはcontentResolverの役割ですか? (本当に何が本当であるか分かりません)

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

最後に、オンラインコンポーネントを構築/ホストする最も簡単な方法は何ですか?この部分はすべて新しいです。 masterデータベースを公衆のDropboxフォルダに置くことはできますか、または最初からカスタムphp web-appをビルドする必要はありますか?または、この部分をより簡単にするためにパッケージ化されたソリューションがありますか?

+0

私は3年前に質問された質問を受け、受け入れられた答えがあります。奨励金のためにもっと多くの情報を必要としているかどうかを詳しく教えてください。 – RocketRandom

答えて

22

間違いなくContentProviderSyncAdaptersを使用する必要があります。あなたはすべき:

  • は、あなたが維持するためにonPerformSync()
  • 使用SharedPreferencesストレージを上書きしますあなたのSyncAdapter専門でContentProvider

  • の権限を一致ContentProviderインタフェース
  • セットアップSyncServiceを使用してデータベース機能をラップあなたの同期パラメータのトラック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); 
    
  • その最初の同期場合、これは簡単にあなたを伝えることができますし、ここに

  • を初期処理を行うことができますあなたは一方通行/双方向すなわち同期のためにここにあなたのアルゴリズムを記述します。
  • タイムスタンプとサーバーデータベースIDをAndroidレコードに記録して同期をとると便利です。これは、マージ戦略に役立ちます。
  • ここでContentProviderをDB操作に使用します。 ContentProvidersは、アプリケーションからのデータへの一貫したアクセス方法と、アダプタの同期方法を提供します。彼らはアップデートのシステムに通知し、フレームワークとスケジュールが同期するようにします。また、他のアプリへのデータのパブリックインターフェイスとして役立てることもできます。

  • また、SyncServiceを使用すると、バッテリーを節約できます。彼らはシステム最後に

を、目覚めの代わりに、各アプリのすべてのアプリケーションのために一緒にバッチ処理される場合、ネットワークを使用するシステムは、その最高の同期操作のキックとしくすぐる

あなたが見なければならない2個のサンプルがあります。で。これらのアプリはクラウドコンポーネントのGoogle App Engineの使用をhttp://developer.android.com/resources/samples/SampleSyncAdapter/index.html

両方 - http://code.google.com/p/jumpnote/source/browse/

  • SampleSyncAdapter - 彼らはかなり私は

    1. JumpNoteを説明し、すべてをカバーしています。簡単に始めることができますので、間違いなくそのオプションを探索してください。

  • +0

    サンプルをありがとう。あなたはこれをカバーするオンラインチュートリアルを知っていますか? (コードは素晴らしいですが、歩き回るのにしばらく時間がかかります)、developer.android.comのページにはあまり言及されていません。 – Brent

    +0

    私はここ2部シリーズを見ています - http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/。パート2がより適切です。このチュートリアルでは、カスタムアカウントを使用します。あなたはcom.googleアカウントに頼ることができます。 – Anirudh

    -1

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

    次は時々、どのクラウド/サーバーDBを同期する必要がありますか。したがって、特定の間隔をとり、clound/server DBと同期するようなアンドロイドでサービスを作成してください。

    マージのため、テーブルにタイムスタンプを入れてください。タイムスタンプをチェックし、それに応じて更新してください。

    関連する問題