实战 | 在 Room 中使用 Flow

本文介绍了如何在 Room 2.2 版本中利用 Flow 实现数据库读操作的可观察性,当数据库数据发生变化时,能够接收到实时通知。通过示例展示了在 DAO 中使用 Flow 获取所有小狗信息和单只小狗信息的情况,强调了在数据更新时 Flow 的重新派发机制,并提到了如何使用 distinctUntilChanged 操作符来过滤不必要的更新通知。最后,推荐了使用协程和 Flow 结合其他 Jetpack 库进行更高效的应用开发。
摘要由CSDN通过智能技术生成

△ Room 中对 Flow 的支持

Jetpack Room 对协程的支持越来越丰富: Room 2.1 版本增加了对协程的支持,并加入了一次性 (one-shot) 的读写操作,Room 2.2 我们通过 Flow 为读操作加入了可观察性,当数据库中的数据有变化时它可以使您收到通知。

△ Room 支持异步 query 操作

  • Flow

    https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/

Flow 实战

假设我们有一个记录小狗信息的数据库,它的 name 字段是主键 (primary key),所以在数据库中不可能同时有两个 name 字段相同的数据,也就是每只小狗都是唯一的。

@Entity
data class Dog (
    @PrimaryKey val name: String,
    val cuteness: Int,
    val barkingVolume: Int
)

为了从数据中获取一个包含所有小狗信息的总表,我们在 DAO 中编写如下 query 语句:

@Query("SELECT * FROM Dog")
fun getAllDogs(): List<Dog>
  • DAO

    https://developer.android.google.cn/training/data-stor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值