1. ホーム
  2. アンドロイド

[解決済み】AndroidアプリとWebサーバー間のデータ同期について【終了しました

2022-04-01 15:56:19

質問

Androidアプリとサーバー間でデータ(dbレコードやメディアなど)を同期させたいのですが、どうすればいいですか?もし、あなたが Evernote のようなアプリケーションのことを指しているのだと思います。

DBのレコードを同期させたいと考えています。

  1. 各ユーザーは、自分用のサーバースペースの一部を持っています(例えば Evernote または Dropbox ). もしかしたら、ユーザーは携帯電話で新しいレコードを作成し、サーバーに新しいレコードを作成するかもしれません。 これらのレコードをマッチングさせるにはどうすればよいですか? 同じIDのレコードがある場合 どのようなアルゴリズムが良いですか?

  2. ただし JSON , 携帯電話端末とサーバーの間でデータを送信する方法はありますか?

  3. もし SyncAdapter ContentProvider 具体的に教えてください。(サンプルやチュートリアルを提供していただけると助かります。または、私の検索を広げる/導くのに役立つアドバイスやキーワードもお願いします。)

どのように解決するのですか?

より大きな問題に取り組むことで、すべての質問に答えようと思います。 ウェブサーバーとアンドロイドアプリの間でデータを同期させるにはどうしたらいいですか?


ウェブサーバーとアンドロイドアプリの間でデータを同期するには、アンドロイドデバイスにいくつかの異なるコンポーネントが必要です。

永続的なストレージ。

これは、携帯電話がウェブサーバーから受信したデータを実際に保存する方法です。これを実現する一つの方法として、独自のカスタム ContentProvider は、Sqlite データベースにバックアップされています。コンテンツプロバイダーの適切なチュートリアルは、ここにあります。 http://thinkandroid.wordpress.com/2010/01/13/writing-your-own-contentprovider/

A ContentProvider は、保存されたデータを操作するための一貫したインターフェイスを定義しています。また、必要であれば、他のアプリケーションからデータを操作できるようにすることもできます。あなたの ContentProvider はSqliteデータベース、Cache、または任意のストレージメカニズムにすることができます。

を使うことを確かにお勧めしますが ContentProvider をSqliteデータベースと組み合わせることで、任意のJavaベースのストレージ機構を使用することができます。

データ交換フォーマット。

これは、ウェブサーバーとアンドロイドアプリの間でデータを送信するために使用するフォーマットです。最近人気のあるフォーマットはXMLとJSONの2つです。フォーマットを選択する際には、どのようなシリアライズライブラリが利用可能かを考える必要があります。私は、gsonという素晴らしいjsonシリアライゼーションライブラリがあることを知っています。 https://github.com/google/gson XMLにも同じようなライブラリがあると思いますが。

同期サービス

サーバーから新しいデータを取得し、サーバーのコンテンツを反映するためにモバイルコンテンツを更新できる、ある種の非同期タスクが必要でしょう。また、ローカルでコンテンツを変更し、その変更を反映させたい場合は、サーバーに通知することも必要です。Android では SyncAdapter パターンは、このパターンを簡単に解決する方法です。ユーザーアカウントを登録する必要がありますが、あとはAndroidがたくさんの魔法をかけてくれて、自動的に同期できるようにしてくれます。ここに良いチュートリアルがあります。 http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/


同じレコードかどうかを識別する方法ですが、通常は一意のIDを持つ項目を作成し、アンドロイド端末とサーバーの両方に保存します。それを使って、同じ参照先であることを確認することができます。さらに、quot;updated_at"のようなカラム属性を保存することで、常に最新のデータを取得したり、新しく書き込んだデータを誤って上書きしてしまわないようにすることができます。