android - 如何从 Room 数据库中获取数据
问题描述
我编写了一个函数来监听我的房间数据库中发生的变化。如果我只想在任何其他时间获取数据而不听取更改,我应该做什么。
道
@Dao
interface OfflineDataDao {
@Query("SELECT * FROM OfflineData")
fun getOfflineData(): Flow<List<OfflineData>>
class OfflineDatabaseManager private constructor(
private val dp: LibraryDatabase
) {
//LISTENS TO CHANGES IN THE DATABASE
fun getOfflineData(): Flow<List<OfflineData>> {
return dp.getOfflineDataDao().getOfflineData()
}
}
fun getOfflineData() {
launch {
OfflineDatabaseManager.getInstance(app.applicationContext).getOfflineData().collect {
Timber.d("OfflineDataLib - observing offline data" + it.toString())
}
}
}
使用上述函数,我可以监听数据库中的变化,但是如果我只想从数据库中获取数据,那该怎么办。
请问我该怎么做
更准确地说,我有一个监听网络变化的功能,如果有网络或没有网络,我想在其中获取离线数据中的数据,我该怎么做。
这是我监听网络变化的功能
fun listenToConnectionChanges() {
launch {
OfflineDatabaseManager.getInstance(app.applicationContext).networkConnectionActivated
.collect { isNetworkConnectionActive ->
Timber.d("OfflineDataLib - getOfflineData() - isNetworkConnectionActive - " + isNetworkConnectionActive)
if (isNetworkConnectionActive) {
//I WANT TO GET THE DATA FROM THE DATABASE
}
}
}
}
谢谢R
解决方案
您可以使用挂起函数并直接List<OfflineData>
在您的 DAO 中返回。
离线数据道:
@Query("SELECT * FROM OfflineData")
suspend fun getOfflineData(): <List<OfflineData>
离线数据库管理器:
suspend fun getOfflineData(): <List<OfflineData> {
return dp.getOfflineDataDao().getOfflineData()
}
然后直接获取协程范围内的数据:
fun getOfflineData() {
launch {
val items = OfflineDatabaseManager.getInstance(app.applicationContext).getOfflineData()
}
}
推荐阅读
- angular - Angular 5:如何在 ngx 引导模式中显示用户的详细信息?
- asp.net-web-api - http 参数中带有连字符的应用服务
- elasticsearch - 在 DateRangeQuery 中进行比较的是哪种方式?
- python - 使用 Python boto 从 S3 获取文件元数据
- android - Cordova 模拟器未在模拟器设备上安装应用程序
- java - android中的静态变量使用
- javascript - 如何删除\ n,不需要的文本并需要在抓取数据时逐行打印引号
- python - 在 Tableau 中运行 python(预测)时出错
- php - 从 Python 加密到 PHP 的 MCRYPT_RIJNDAEL_256
- angular - “Route”类型没有共同的属性