Как подписаться на результат запроса к DB Room Kotlin Android?
помогите пожалуйста получить ответ от базы данных Room, стартовал с этой инструкции https://developer.android.com/training/data-storage/room?hl=ru, запрашиваю простейшее - список строк только что созданной базы данных, использую рекомендуемую корутину Flow (без неё приложение падает), ответом приходит объект kotlinx.coroutines.flow.SafeFlow@...., вероятно нужно подписаться на ответ чтобы получить List? Пожалуйста, ответьте исправлением моего кода, чтобы Log вывел ответ, иначе я не пойму куда и как его пристроить. ) Я честно рыл stackoverflow пару дней, но не нашел пример кода.
import android.os.Bundle
import android.util.Log
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.room.Dao
import androidx.room.Database
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.Query
import androidx.room.Room
import androidx.room.RoomDatabase
import kotlinx.coroutines.flow.Flow
@Entity(tableName = "users")
data class User(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val name: String,
val age: Int
)
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getAllUsers(): Flow<List<User>>
}
@Database(entities = [User::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
class MainActivity : AppCompatActivity() {
companion object {
lateinit var database: AppDatabase
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
database = Room.databaseBuilder(this, AppDatabase::class.java, "my_database")
.build()
val allUsers = database.userDao().getAllUsers()
Log.d("RoomDB", allUsers.toString())
}
}