所以我的房间数据库中的 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',但是当我尝试在屏幕上显示任何内容时,我认为错误存在于业务逻辑中,但如果我错了,请纠正我
我只需将 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())
尝试更改 recordStatus 字段,因为您正在尝试存储枚举类。您可以仅使用枚举项的名称或类似的名称。
如果您需要存储枚举类,您将需要创建一个自定义@TypeConverter。如果您需要的话请检查这个