15

特定の SQLite データベースが変更されるたびに通知する必要がある Android アプリを作成しています (新しい行が追加、削除、または更新されます)。

これらの通知を聞くプログラム的な方法はありますか?

各テーブルに DB トリガーを書き込むことが唯一の方法ですか?

4

3 に答える 3

5

SQLite はデータ変更通知コールバックを提供します。Android がそれらを直接公開しているとは思いませんが、たとえば、いくつかの変更通知を提供するCursorAdapterがあります。

thinksteep が尋ねたように、DB は自分のアプリケーションの範囲外で変更されると思いますか?

于 2012-03-05T17:51:42.120 に答える
1

DataSetObserverなどのオブザーバー クラスを登録できます。

次に、何かを変更するたびに、変更をcursor.registerDataSetObserver(..)監視するために呼び出すことができます。

十分に文書化されていませんが、いくつかの例があると確信しています

于 2012-03-05T18:01:16.920 に答える
0

getContentResolver().registerContentObserverも使用できますが、残念ながら、どのような変更が行われたかはわかりません。削除、挿入、または更新の可能性があります。

DB とやり取りする ContentProvider を制御する場合は、Intent を起動するか、getContentResolver().notifyChangeを使用して、テーブルとアクションの両方を識別する特別な Uri 通知を送信できます。通知に使用できる Uri の例は次のとおりです。content://my-authority/change/table-name/insert

しかし、その場合でも、どの行が変更の影響を受けたか正確にはわかりません。

変更ログ テーブルに書き込むトリガーは、発生元に関係なくすべての変更を確実に通知し、発生した正確な ID とアクションを知ることができるようです。残念ながら、挿入/更新/削除が遅くなることを意味し、変更を処理および削除するには、おそらく何らかのサービスが必要であることを意味します。

これらがより良い解決策であるかどうか聞いてみたいです!

于 2012-07-26T03:44:44.333 に答える