2012-03-06 18 views
2

私は、リモートサーバー上の情報に対してプロキシとして動作するContentProviderを作りたいと思っています。サーバーが情報を自発的に更新し、その更新をContentProviderに送信する可能性があります。私の目標は、ContentProviderから取得したデータを表示し、基礎となるデータが変更された場合に自動的に更新するListViewを持つことです。AndroidでCursorの可観測性はどのように機能しますか?

私の質問:クライアントがContentResolverにアクセスするためにContentResolverを使用していて、query()メソッドを使用してCursorを取得した場合、新しいデータが到着した場合、どのように通知されますか?つまり、Cursorオブジェクト自体に何らかの通知がありますか?このCursor observabilityはどのように機能しますか?

参考までにContentProvider内でMatrixCursorを使用することを考えています。

答えて

1

ContentProviderは、変更されたURIに対してContentResolver.notifyChange()を呼び出す必要があります。 v4互換jarで提供されているLoader API(ハニカム以降に付属)を使用し、ActivityまたはFragmentにLoaderManager.LoaderCallbacksインターフェイスを実装し、notifyChangeが呼び出されたときにUIの更新を処理する必要があります。

ドキュメント: http://developer.android.com/guide/topics/fundamentals/loaders.html

チュートリアル: http://mobile.tutsplus.com/tutorials/android/android-sdk_loading-data_cursorloader/

0

これは問題ではありません。 registerContentObserver()を使用して、コンテンツオブザーバをカーソルに登録します。あなたがデータを見ている唯一のアプリケーションであれば、ContentProviderを使う必要はありません。

また、アップデートをプッシュするよりも、サーバーをポーリングするほうが簡単でしょう。結局のところ、たとえデータが変更されたとしても、デバイスユーザはデータを見るまで気にしません。自分のアクティビティがフォアグラウンドになっている場合は、サーバーに自動的に同期するか、同期するかどうかをユーザーに尋ねることができます。ネットワークへの接続は保証されていないことを覚えておいてください。そうすれば、ネットワークが利用可能になったときにプッシュするほうがよいでしょう。そして、サーバがあなたのデバイスが利用可能かどうかを把握する必要がないので、より簡単です。

C2DM for pushをcode.google.comで検索します。プルするには、シンクアダプタの使用を検討してください。 SampleSyncAdapterに例があります。

関連する問題