如何从会议室数据库中获取数据

时间:2020-10-21 08:27:51

标签: android kotlin android-room kotlin-coroutines

我编写了一个函数,可以监听房间数据库中发生的变化。如果我只想获取其他任何地方的数据而无需听更改,那我应该怎么做。

@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

1 个答案:

答案 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()
    }
}