SQLiteTransactionListener onCommit и onRollback никогда не вызывается

1

Я пытаюсь использовать SQLiteTransactionListener, чтобы узнать, когда была совершена пакетная транзакция, поэтому я могу отправить событие notifyChange для наблюдателей в ContentProvider.

Код запускает транзакцию для массовой операции и имеет вложенные транзакции для каждой вставки или обновления.

Я получаю сообщение onBegin для каждого startTransaction массовой операции, однако я никогда не получаю onCommit или onRollback

Я выполнил начальные и конечные транзакционные вызовы, чтобы подтвердить, что вложенные вызовы завершаются для каждой транзакции, и, как видно ниже, они всегда совпадают.

Finish batch operation: success = true
End batch transaction
Begin batch transaction
Bulk transaction: onBegin
Inserting values into "Messages"table
insert values transaction begin
insert values transaction success
notifyChange not sent due to currently processing batch operation
insert values transaction end
Inserting values into "Content"table
insert values transaction begin
insert values transaction success
notifyChange not sent due to currently processing batch operation
insert values transaction end
Update values transaction begin
Update values transaction success
notifyChange not sent due to currently processing batch operation
Update values transaction end
Finish batch operation: success = true
End batch transaction
Download begining for content ID 12

Я также рассмотрел код для SQLiteDatabase здесь, но не мог видеть, почему эта функция не будет вызвана. Я попытался найти некоторые примеры этого онлайн (здесь и в поиске Google), но только найти документацию API.

Кто-нибудь имел успех в этом классе? Или может кто-то рассказать мне, почему я не получил бы это событие?

  • 1
    После некоторого дальнейшего изучения я обнаружил, что эти обратные вызовы работают, но только если у вас нет вложенных транзакций. Для вложенных транзакций я не получаю вызовы onCommit или onRollback.
Теги:

1 ответ

0

В соответствии с кодом SQLiteDatabase.java вложенный вызов транзакции beginTransaction() очистит или заменит SQLiteTransactionListener, установленный родительской транзакцией. Каждый раз при вызове beginTransaction() mTransactionListener будет изменен.

private void beginTransaction(SQLiteTransactionListener transactionListener,
        boolean exclusive) {

        mTransactionListener = transactionListener;

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню