我正在编写一个需要在给定SQLite数据库更改时通知的Android应用程序。
是否有编程方式来监听这些通知?
编写每个表的DB触发器是唯一的方法吗?
我正在编写一个需要在给定SQLite数据库更改时通知的Android应用程序。
是否有编程方式来监听这些通知?
编写每个表的DB触发器是唯一的方法吗?
SQLite提供了数据更改通知回调。我认为安卓没有直接暴露它们,但是例如CursorAdapter提供了一些更改通知。
然而,正如thinksteep所问,您是否希望在自己的应用程序范围之外更改数据库?
您可以注册一个观察者类,例如DataSetObserver
然后,每当您更改某些内容时,可以调用cursor.registerDataSetObserver(..)
来注册观察变化。
虽然文档不是很完善,但我相信有一些示例存在于网络上。
你也可以使用getContentResolver().registerContentObserver,但不幸的是它并不能告诉你进行了什么样的更改,可能是删除、插入或更新。
如果你控制与数据库交互的ContentProvider,那么你可以触发一个Intent或使用getContentResolver().notifyChange发送一个特殊的Uri通知,该通知标识了表和操作。你可以使用以下示例Uri进行通知:content://my-authority/change/table-name/insert
但即使这样,你也不知道确切地哪些行受到了更改的影响。
似乎编写写入更改日志表的触发器将保证你听到所有更改的消息,无论它们来自何处,而且你可以知道发生的确切id和操作。不幸的是,这意味着更慢的插入/更新/删除,并且你可能需要一种服务来处理和删除更改。
如果有更好的解决方案,我很想听听!