【问题标题】:How to get data from Room database如何从 Room 数据库中获取数据
【发布时间】:2021-02-04 03:17:28
【问题描述】:

我编写了一个函数来监听我的房间数据库中发生的变化。如果我只想在任何其他时间获取数据而不听取更改,我应该怎么做。

@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
                    }
                }
        }
    }

谢谢 回复

【问题讨论】:

  • 尝试使用观察实时数据。像这样:db.getinstance.getall.observe(offlinelist -> )
  • 使用 Flow 不是正确的方法吗?

标签: android kotlin android-room kotlin-coroutines


【解决方案1】:

您可以使用挂起函数并在您的 DAO 中直接返回 List&lt;OfflineData&gt;

OfflineDataDao:

@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()
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2018-06-27
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多