Как получить данные из базы данных номеров

#android #kotlin #android-room #kotlin-coroutines

#Android #kotlin #android-комната #kotlin-сопрограммы

Вопрос:

У меня есть функция, которая прослушивает изменения, происходящие в моей базе данных комнат. если я просто хочу получить данные в любой другой точке, не прослушивая изменения, что я должен делать.

Dao

 @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. попробуйте usig наблюдать за данными в реальном времени. что-то вроде этого: db.getinstance.getall.observe(offlinelist -> )

2. использование потока — неправильный подход?

Ответ №1:

Вы можете использовать функцию приостановки и прямого возврата List<OfflineData> в вашем DAO.

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