2012-03-11 9 views
0

私はAndroidアプリケーションを作成していますが、GUI部分とブロードキャスト受信機で構成されています。ブロードキャスト受信者は、SQLiteテーブルに新しい行を追加することができます。これは一般にUIによって使用されます。AndroidでSQLテーブルの変更を処理する方法

問題:UI部品が(フォアグラウンドで)実行中の場合、ブロードキャスト受信者はSQLに新しい行を追加できますが、refresh()メソッドが呼び出されるまでその行はGUIに表示されません。しかし、バックグラウンドのブロードキャスト受信者のOnReceive()メソッドから、このリフレッシュの必要性についてフォアグラウンドのUIアクティビティをどのように通知するかについてはわかりません。

私は、Win/* NIXのネイティブソフトウェア開発に経験があり、Androidのイベントに似たものを見つけようとしましたが、成功しませんでした。

私は間違った方法ですか?

答えて

0

なぜ放送受信機を使用するのですか? SQLiteテーブルは他のアプリケーションやリモートサービスからのデータを受け取りますか?もしそうなら、あなたは本当にバックグラウンドでデータベースを扱うためにはるかに簡単でより堅牢な方法であるコンテンツプロバイダを本当に使うべきです。

UIのテーブルの一部を表示している場合は、おそらくテーブルからカーソルを取得します。テーブルのカーソルにオブザーバーを登録すると、カーソルを保持しているデータが変わるたびに通知されます。

+0

BroadcastReceiverは、新しい着信SMSを処理して銀行通知を追跡するため、これがデータベースの新しい行の唯一の送信元です。 –

+0

カーソルオブザーバーに関する情報をありがとう、私はそれを試してみます –

+0

残念ながら、お手伝いしていません。アプリケーションがデータベース内の既存のレコードの1つを更新するときにカーソルオブザーバ通知を受け取ることができますが、新しいレコードの追加を処理できません。ハンドラはアクティビティからもブロードキャストレシーバからも新しい行作成のために呼び出されませんでした。新しい行を追加することはできますか? –

0

あなたが変更/更新されたときにコンテンツを非同期に更新できるUIのCursorLoaderを見てみることができます。

How to use CursorLoader

あなたはnotification_uriを設定する必要があります。

cursor.setNotificationUri(context.getContentResolver(),your_notification_uri) 

これらのデータセットは、ブロードキャストレシーバの変化/ごBraodcastReceiverによって更新され、上記通知URLに通知を送信する場合は、UI内のデータはそれに応じて更新されます。

context.getContentResolver().notifyChange(your_notification_uri,null); 
+0

APIレベル10(Android 2.3.4)を使用しているため、残念ながらCursorLoaderは使用できません。オブザーバーが助けにならない場合は、カーソルのオブザーバーを使用して、代わりにコンテンツプロバイダーを試してみます。 –

関連する問題