我编写了一个函数,可以监听房间数据库中发生的变化。如果我只想获取其他任何地方的数据而无需听更改,那我应该怎么做。
道
@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
答案 0 :(得分:0)
您可以使用暂停功能,并直接在您的DAO中返回List<OfflineData>
。
OfflineDataDao:
@Query("SELECT * FROM OfflineData")
suspend fun getOfflineData(): <List<OfflineData>
OfflineDatabaseManager:
suspend fun getOfflineData(): <List<OfflineData> {
return dp.getOfflineDataDao().getOfflineData()
}
然后直接在协程范围内获取数据:
fun getOfflineData() {
launch {
val items = OfflineDatabaseManager.getInstance(app.applicationContext).getOfflineData()
}
}