Как брать данные из базы данных и передать их в UI

«Как брать данные из базы данных и передать их в UI» — вопрос из категории Базы данных, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для работы с базой данных и передачи данных в UI в Android рекомендуется использовать архитектурные компоненты, такие как ViewModel и LiveData/Flow. Вот пример с Room и Kotlin:

// Entity
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String
)

// DAO
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAll(): Flow<List<User>>
}

// ViewModel
class UserViewModel(application: Application) : AndroidViewModel(application) {
    private val dao = UserDatabase.getDatabase(application).userDao()
    val users: LiveData<List<User>> = dao.getAll().asLiveData()
}

// Activity/Fragment
viewModel.users.observe(this) { users ->
    // Update UI with users list
    adapter.submitList(users)
}

Ключевые моменты:

  1. Room предоставляет абстракцию над SQLite
  2. ViewModel сохраняет данные при смене конфигурации
  3. LiveData/Flow автоматически обновляют UI при изменении данных
  4. Все операции с БД выполняются в фоновом потоке