Intereting Posts
Существует ли концепция Android Intent в iPhone SDK Разница между внутренней картой SD и внутренним хранилищем. Примечание: android.support.v4.text.ICUCompatIcs: не удается найти динамически ссылочный класс libcore.icu.ICU Android – Не удалось найти информацию о поставщике для com.google.settings в примере MapView Как извлечь текст в стиле HTML из EditText в Android? Операторы обработки переопределения 2 и RxJava Как использовать Spatialite с Xamarin на Android Откройте собственный браузер из приложения Android. Возвращает ли EditText.getText () значение null? Использование проекта библиотеки Android Деятельность в рамках другого проекта Как использовать Android aaptOptions? Очистить стек Android Fragment обратно без появления? Получение USB-кабеля, подключенного к входу IN / OUT с использованием EXTRA_PLUGGED, не работает Модернизация пользовательского клиента для проверки подлинности WebTokens Исключение Null указателя с пользовательским представлением в макете xml

Уведомления Android DBite Android

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

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

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

Solutions Collecting From Web of "Уведомления Android DBite Android"

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

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

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

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

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

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

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

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

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

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