2012年11月5日月曜日

DBに変更があった場合ContentResolverのcallbackを呼び出す

データベースのデータが追加、変更、削除されたときに特定の処理を呼びたいってありますよね。うん、あるある。

AndroidだとregisterContentObserverとnotifyChangeを使うとできます。例えばこんな感じ。

メインの処理側

...
ContentObserver contentObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//データベースに変更があったときに呼び出したい処理を書く
}
};
//ObserverをContentResolverに登録
getContentResolver().registerContentObserver(URI, true, contentObserver);
...
ContentProviderを継承したクラス。この場合はinsertを例に書いてます。

@Override
public Uri insert(Uri uri, ContentValues contentvalues) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.insert("test", null, contentvalues);
//通知を発したいDB処理の中でnogifyChangeを呼ぶ
getContext().getContentResolver().notifyChange(uri, null);
return null;
}

0 件のコメント:

コメントを投稿