Android SQLite БД уведомления - PullRequest
       2

Android SQLite БД уведомления

15 голосов
/ 09 января 2012

Я пишу приложение для Android, которое необходимо уведомлять при каждом изменении базы данных SQLite (любая новая строка добавлена, удалена или обновлена).

Есть ли программный способ прослушивания этих уведомлений?

Является ли запись триггеров БД для каждой таблицы единственным способом?

Ответы [ 3 ]

5 голосов
/ 05 марта 2012

SQLite предоставляет Обратные вызовы уведомления об изменении данных .Я не думаю, что Android предоставляет их напрямую, но у него есть, например, CursorAdapter , который предоставляет некоторые уведомления об изменениях.

Однако, как спрашивает thinkteep, ожидаете ли вы, что ваша БД будет изменена за пределамисфера вашего собственного применения?

1 голос
/ 05 марта 2012

Вы можете зарегистрировать класс наблюдателя, например DataSetObserver

Затем, когда вы что-то меняете, вы можете позвонить cursor.registerDataSetObserver(..), чтобы зарегистрировать наблюдаемые изменения.

Это не очень хорошо задокументировано, но я уверен, что есть несколько примеров

0 голосов
/ 26 июля 2012

Вы также можете использовать getContentResolver (). RegisterContentObserver , но, к сожалению, он не сообщает вам, какие изменения были сделаны, это может быть удаление, вставка или обновление.

Если вы управляете ContentProvider, который взаимодействует с БД, вы можете запустить Intent или использовать getContentResolver (). NotifyChange , чтобы отправить специальное уведомление Uri, которое идентифицирует как таблицу, так и действие. Пример Uri, с которым вы могли бы уведомить, может быть: content://my-authority/change/table-name/insert

Но даже тогда вы не знаете точно, на какие строки повлияло изменение.

Похоже, что триггеры, которые записывают в таблицу журнала изменений, гарантируют, что вы услышите обо всех изменениях, независимо от того, откуда они произошли, и вы сможете узнать точный идентификатор и произошедшее действие. К сожалению, это означает более медленные вставки / обновления / удаления, и это означает, что вам, вероятно, нужна какая-то служба для обработки и удаления изменений.

Я бы хотел услышать, есть ли какое-нибудь лучшее решение!

...