[解決済み】AndroidアプリとWebサーバー間のデータ同期について【終了しました
質問
Androidアプリとサーバー間でデータ(dbレコードやメディアなど)を同期させたいのですが、どうすればいいですか?もし、あなたが
Evernote
のようなアプリケーションのことを指しているのだと思います。
DBのレコードを同期させたいと考えています。
-
各ユーザーは、自分用のサーバースペースの一部を持っています(例えば
Evernote
またはDropbox
). もしかしたら、ユーザーは携帯電話で新しいレコードを作成し、サーバーに新しいレコードを作成するかもしれません。 これらのレコードをマッチングさせるにはどうすればよいですか? 同じIDのレコードがある場合 どのようなアルゴリズムが良いですか? -
ただし JSON , 携帯電話端末とサーバーの間でデータを送信する方法はありますか?
-
もし 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"のようなカラム属性を保存することで、常に最新のデータを取得したり、新しく書き込んだデータを誤って上書きしてしまわないようにすることができます。
関連
-
[解決済み】getCheckedRadioButtonId()が無駄なintを返す?
-
[解決済み] Androidのgravityとlayout_gravityの違いは何ですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] match_parentとfill_parentの違いは何ですか?
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み] Androidでファイルをダウンロードし、ProgressDialogで進捗を表示する。
-
[解決済み] Androidでインテントから余分なデータを取得するにはどうすればよいですか?
-
[解決済み] Androidでアプリの共有設定データを削除する方法
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android : invisibleとgoneの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】ビットマップを保存する場所について
-
[解決済み] [Solved] java.lang.RuntimeException: アクティビティーのインスタンス化ができません ComponentInfo
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み】android.content.ActivityNotFoundException: 明示的なアクティビティクラスを見つけることができません。
-
[解決済み] BIOSのセキュリティ設定でVT-xを有効にする(お使いのコンピュータのドキュメントを参照)。
-
[解決済み] AndroidでBluetoothが有効かどうかのチェックに失敗する(REQUEST_ENABLE_BTを変数に解決できない)。
-
[解決済み] ADBエラー:デーモンに接続できない
-
[解決済み] Android Fragment onAttach() 非推奨