2011-08-03 8 views
0

私は、ユーザーがメッセージを送受信できるアプリケーションを開発中です。メッセージはサーバー上のデータベースに格納されます。私はListViewのメッセージを電子メールの受信トレイに似ています。ここに私の計画的な実装です:SQLiteとServerのデータを使ってListVIewを取り込む

  • メッセージ活動を開始するには、CursorLoader
  • (例えば、先週からの)デバイス上に保存されたメッセージのSQLiteキャッシュを使用してリストを作成する、サーバーから新しいメッセージをダウンロードSQLiteデータベースに追加し、更新します。Cursor
  • 古いメッセージはユーザーがスクロール(ただし保存はしません)しながらダウンロードし、スクロールしても遅くならないほど十分なメッセージが読み込まれていることを確認します。ここで

私の質問です:

  1. これは、一般的には良い戦略のように見えるのか?
  2. 新しいメッセージをダウンロードして保存するときに、Cursorを更新してそのデータをSQLiteデータベースと同期させる方法はありますか?
  3. 古いメッセージをダウンロードしたときに、Cursorに追加する方法はありますか。CursorAdapterを処理してListViewを処理することはできますか?

答えて

1

はい、これは良い戦略のようです。ここでのポイントは、2つのデータソース(SQLiteとServer Data)を単一のソースにまとめ、そこからデータを取得することです。

  1. はい、いい戦略のようです。
  2. 基礎となるデータセットを変更するときは、notifyDataSetChangedを呼び出して、アダプタにデータの再取得を強制する必要があります。
  3. 私が言ったように、ここで重要なのは、アダプタがデータをフェッチする単一のデータソース構造を持つことです。ここでの最善の解決策は、一時テーブルを使用することです。基本的に一時テーブルは、データベースとの単一の接続の間だけ存在します。したがって、接続を閉じると、テーブルは自動的に削除されます。データベースを作成して一時テーブルを作成し、そこにすべてのメッセージを挿入します。新しいメッセージをダウンロードするときは、実際のテーブルと一時テーブルに挿入しますが、古いメッセージをダウンロードするときは、一時テーブルにのみ挿入してください。最後に、tempテーブルのみを使用してデータを取得します。
+0

質問3の解決策が好きです - ありがとう! – Pikaling

0

あなたはカーソルを更新することで何を意味するのか分かりません。

ここは私の2セントです。

データベースを更新するサービス/スレッドを作成します。 と似ているとメールと表示されているので、新しいメッセージが通知領域に届くと、その旨を通知するのに役立ちます。

ユーザがデータベースからアクティビティクエリを開始するたびに、

タイムスタンプまたはmessageIdを使用すると、競合を避けることができます。

+0

こんにちは、私はバックグラウンドでデータを同期することができますし、アクティビティの開始時に新しいデータがsqliteデータベースからロードされます。私は質問2を並べ替えると思います。私の大きな障害は質問3です。どのように私はsqliteデータベースのデータとサーバーのデータを1つのリストにまとめますか? – Pikaling

+0

あなたはいつも正しい場所から読み、それはsqldbになります。あなたは常にサーバーからdbに書き込むでしょう。それを簡単に保つようにしてください。一意のIDを使用して各メッセージを一意に識別しようとします。 – Samuel

関連する問題