2

例如,我想使用 sqlite 触发器注册回调方法,

public void printLog(){
 Log.i("TAG","1 row added");
}

在 sqlite 中插入任何行后调用此方法。

可能吗?

怎么做?

4

2 回答 2

1

SQLite 提供数据更改通知回调。我认为 Android 不会直接公开它们,但它确实有例如 CursorAdapter 提供一些更改通知。

您也可以使用getContentResolver().registerContentObserver,但遗憾的是它不会告诉您进行了何种更改,它可能是删除、插入或更新。

如果您控制与 DB 接口的 ContentProvider,那么您可以触发 Intent 或使用getContentResolver().notifyChange发送一个特殊的 Uri 通知,该通知标识表和操作。您可以通知的示例 Uri 可能是: content://my-authority/change/table-name/insert

但即便如此,您也不确切知道更改影响了哪些行。

似乎写入更改日志表的触发器将保证您听到所有更改,无论它们来自何处,并且您可以知道发生的确切 ID 和操作。不幸的是,这意味着插入/更新/删除速度较慢,这意味着您可能需要某种服务来处理和删除更改。

我很想知道这些是否是更好的解决方案!

于 2013-03-07T10:45:12.450 回答
0

您可以设置内容观察者此链接将帮助接收回调以更改内容http://developer.android.com/reference/android/database/ContentObserver.html

于 2013-03-07T10:44:05.110 回答