我正在监听本地数据库中的更改
@Query("SELECT * FROM favorite_recipes_table ORDER BY id ASC")
fun readFavoriteRecipesAsFlow(): Flow<List<FavoriteEntity>>
但是当我在 DAO 中运行另一个方法来删除同一个表中的项目时:
@RawQuery
suspend fun deleteFavoritesRecipe(query: SupportSQLiteQuery): Int
从
readFavoriteRecipesAsFlow
返回的流未被调用。可能是什么问题?
发生这种情况是因为使用了
@RawQuery
。
根据此问题:https://issuetracker.google.com/issues/235373409
示例项目中的删除函数实际上使用 @RawQuery 方法,该方法没有有关正在执行的操作类型的信息,因此不知道它是写入。这会导致交易无法运行,这意味着失效永远不会开始
解决方法是在查询方法中添加
@Transaction
:
@RawQuery
@Transaction
suspend fun deleteFavoritesRecipe(query: SupportSQLiteQuery): Int
或者您可以重新考虑如何使用简单的注释进行此查询,例如
@Query
、@Delete
等
在
https://issuetracker.google.com/issues/235878346上提出了一个问题,请求此功能在使用
@RawQuery
时通知更改,但过去 2 年没有进行任何更新。