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