この質問は何度も聞かれていることは知っていますが、私が対象としている問題は少し異なり、おそらくもっと複雑だと思います。
RESTful Webサービスを使用し、次の要件が必要なアプリケーションを開発します。
アプリは、いくつかの本、その著者、および編集者をリストに詳細に表示する必要があります
アプリは本の検索も許可する必要があります
書籍、著者、編集者は、RESTfulWebサービスから取得されます
アクティビティを開くと、古いデータ(存在する場合)が最初に表示され、新しいデータがネットワークから更新されるように、すべてのエンティティをキャッシュする必要があります。
エンティティが更新されるたびに、関係者に通知する必要があります(
ContentObserver
?通常のListener
実装?)呼び出しがすでに実行されている場合(to
api/books/1337
またはtoなどapi/editors
)、呼び出し元にデータをロードしていることを通知し、元の呼び出し元であるかのように古い呼び出し元(存在する場合)を与える必要があります。一部のデータ(本と著者のみ)はN分ごとに更新する必要があり(ユーザーが決定)、オブザーバーに通知する必要があります(
SyncAdapter
?)
質問:
Google I / O2010でVirgilDobjanschiによって提案されたすべてのコンポーネントを見て研究した後、ここに私の疑問があります。
発信者の「エンティティが更新されている」という概念を透過的に処理するにはどうすればよいですか。実装する必要があるので使用する必要
ContentObserver
がContentProvider
ありますか?Iを使用する
ContentObserver
と、(Dobjanschiによって提案されたように)単一のエンティティのステータスフラグを簡単に設定できます。たとえば、、などUPDATING
ですINSERTING
。しかし、リストをどのように処理する必要がありますか?書籍のリストが必要だとしましょう。ステータスフラグはどこに置くべきですか?リストのみのステータステーブルに入れる必要がありますか?もしそうなら、私は2つのを観察するCursor
必要があります。1つはステータス用で、もう1つは実際のリスト(つまり、テーブル/コンテンツURI)用です。そして、私が求めているエンティティが(まだ)存在しない場合、またはREST呼び出しがを返す場合はどうなり404
ますか?コールバックを処理するにはどうすればよいですか?すべてのRESTメソッドをに配置した場合、ネットワークからエンティティ/エンティティリストを更新するよう
**SyncAdapter**
に「強制」できますか(したがって、適切なテーブルに配置できますか)。SyncAdapter
このように、ステータスフラグが役立ちます。メソッドしかないので、複数のエンティティ(実際には、本や編集者を時々更新したいので、エンティティリスト)で
SyncAdapter
作業できますか?performSync
私の
SyncAdapter
実装がデバイス設定でユーザーによって無効にされている場合、それは何も更新しません(そしてそれは問題ありません)。しかし、ユーザーがアクティビティの[書籍を更新]ボタンをクリックした場合でも、performSync
メソッドを呼び出すことはできますか、それとも無効になりますか?