为什么这个房间查询结果没有显示任何内容

问题描述 投票:0回答:2

所以我的房间数据库中的 DAO 包含这个查询

@Dao
interface RecordsDAO {
    //Other queries

    @Query("SELECT * FROM BloodPressureRecords WHERE recordStatus IN (:list) ORDER BY createdAt DESC")
    fun getSelectedRecords(list: List<RecordStatus>): Flow<List<Record>>
}

看起来像这样,如果记录在我提供的列表中,则应该返回记录,

我创建了一个数据类来创建记录,如下所示


@Entity(tableName = "BloodPressureRecords")
data class Record(
    @PrimaryKey(autoGenerate = true) val id: Long = 0,
    val systolicPressure: String,
    val diastolicPressure: String,
    val pulse: String,
    val createdAt: Long = Clock.System.now().toEpochMilliseconds(),
    val recordStatus: RecordStatus = RecordStatus.NEW
)

记录状态是一个简单的枚举类,结构如下, 我不认为我需要类型转换器才能在房间中使用它

enum class RecordStatus {
    NEW,
    EXPORTED,
    ARCHIVED,
    ERROR
}

但是,当我调用 getRequiredRecords 时,它似乎没有提供任何记录 当我在 ViewModel 中创建状态时,我在视图模型中调用它

这是在这里完成的

//Other view model stuff
private val _state = MutableStateFlow(BloodPressureState())
    private val _selectedState = MutableStateFlow(SelectedState())

    val state = combine(
        _state,
        _selectedState,
        repository.getRequiredRecords(_selectedState.value.selectedRecords)
    ){state, selectedState, requiredRecords ->
        state.copy(
            records = requiredRecords,
            isNewSelected = selectedState.isNewSelected,
            isExportedSelected = selectedState.isExportedSelected,
            isArchivedSelected = selectedState.isArchivedSelected
        )
    }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000L), BloodPressureState())
//Other view model stuff

我像这样创建了 BloodPressureState

data class BloodPressureState(
    //Other states
    val records: List<Record> = emptyList(),
    val isNewSelected: Boolean = true,
    val isExportedSelected: Boolean = false,
    val isArchivedSelected: Boolean = false,
    //Other states
)

还有这样的SelectedState

data class SelectedState (
    val isNewSelected: Boolean = true,
    val isExportedSelected: Boolean = false,
    val isArchivedSelected: Boolean = false,
    val selectedRecords: List<RecordStatus> = emptyList<RecordStatus>()
)

我使用复选框从列表中添加和删除选定的 RecordStatus',但是当我尝试在屏幕上显示任何内容时,我认为错误存在于业务逻辑中,但如果我错了,请纠正我

android kotlin android-jetpack-compose android-room android-viewmodel
2个回答
0
投票

我只需将 getRequiredRecords 从组合函数中取出,以便该部分代码如下所示:

val state = combine(
        _state,
        _selectedState,
    ){state, selectedState ->
        state.copy(
            records = repository.getRequiredRecords(selectedState.selectedRecords),
            isNewSelected = selectedState.isNewSelected,
            isExportedSelected = selectedState.isExportedSelected,
            isArchivedSelected = selectedState.isArchivedSelected
        )
    }.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000L), BloodPressureState())

0
投票

尝试更改 recordStatus 字段,因为您正在尝试存储枚举类。您可以仅使用枚举项的名称或类似的名称。

如果您需要存储枚举类,您将需要创建一个自定义@TypeConverter。如果您需要的话请检查这个

@类型转换器

© www.soinside.com 2019 - 2024. All rights reserved.