@Transaction в Android Room, похоже, не работает должным образомAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 @Transaction в Android Room, похоже, не работает должным образом

Сообщение Anonymous »

В приведенном ниже коде кажется, что поток генерируется между deleteAll и InsertAll. Я ожидал, что эти методы будут выполняться вместе как транзакция. Я что-то упустил?

Код: Выделить всё

private const val RECENT_UPDATE_THRESHOLD_MS = 60_000L

@Dao
interface InboxMessageDao {
@Query(
"SELECT * FROM inbox_message " +
"WHERE toEmail == (SELECT email FROM email_address WHERE isCurrent = 1) " +
"AND (strftime('%s', 'now') * 1000 - cacheLastUpdate) < $RECENT_UPDATE_THRESHOLD_MS"
)
fun getAllFlow(): Flow

@Insert
suspend fun insertAll(messages: List)

@Query("DELETE FROM inbox_message")
suspend fun deleteAll()

@Query("SELECT cacheLastUpdate FROM inbox_message WHERE toEmail == :toEmail LIMIT 1")
suspend fun getCacheLastUpdate(toEmail: String): Long?

@Transaction // TODO: This fails tests sometimes, why?
suspend fun refreshInboxMessages(newMessages: List) {
deleteAll()
// Flow seems to be propagated here giving me sometimes empty list in androidTests
insertAll(newMessages)
}
}
Я ожидаю, что поток будет создан после выполнения всей транзакции.
PS. runInTransaction {} не решает эту проблему.

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-expected
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»