Вот моя сущность:
Код: Выделить всё
@Entity
data class Info(
val email: String,
val userName: String,
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
)
Код: Выделить всё
interface InfoDao {
@Upsert
suspend fun upsertInfo(info: Info)
@Delete
suspend fun deleteInfo(info: Info)
@Query("SELECT userName FROM info LIMIT 1")
fun getUsernameAsLiveData(): LiveData
@Query("SELECT email FROM info LIMIT 1")
fun getEmailAsLiveData(): LiveData
}
Код: Выделить всё
class Repo(
private val db: InfoDatabase,
) {
fun openDatabase() {
db.openHelper.writableDatabase
}
suspend fun upsertInfo(info: Info) {
db.dao.upsertInfo(info)
}
suspend fun deleteInfo(info: Info) {
db.dao.deleteInfo(info)
}
fun getUsername(): LiveData {
val usernameLiveData = db.dao.getUsernameAsLiveData()
return usernameLiveData
}
fun getEmail(): LiveData = db.dao.getEmailAsLiveData()
}
Код: Выделить всё
class RoomViewModel(
private val repo: Repo,
) : ViewModel() {
private val _isOpen = MutableStateFlow(false)
val isOpen: StateFlow = _isOpen
private val _usernameState = MutableLiveData()
val usernameState: LiveData = _usernameState
private val _emailState = MutableLiveData()
val emailState: LiveData = _emailState
fun openDatabase() {
viewModelScope.launch {
repo.openDatabase()
_isOpen.value = true
}
}
suspend fun fetchData() {
viewModelScope.launch {
if (!isOpen.value) {
repo.openDatabase()
}
val username = repo.getUsername().value
_usernameState.value = username
val email = repo.getEmail().value
_emailState.value = email
}
}
suspend fun upsertInfo(info: Info) {
viewModelScope.launch {
repo.upsertInfo(info)
}
}
}
Код: Выделить всё
@Composable
fun DeviceScreen(
navController: NavHostController,
lifecycleOwner: LifecycleOwner,
roomViewModel: RoomViewModel,
) {
val username by roomViewModel.usernameState.observeAsState()
val email by roomViewModel.emailState.observeAsState()
LaunchedEffect(Unit) {
roomViewModel.openDatabase() // before this my roomDatabase was closed
}
LaunchedEffect(roomViewModel.isOpen) {
roomViewModel.fetchData()
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... y-room-dat