我正在Kotlin中构建一个简单的体重跟踪应用程序,使用空间,我很坚韧找到资源来弄清楚如何查询和返回数据库中的一个值,而不返回我的整个数据类。
我知道我在我的刀中返回了一个列表,但是有人能告诉我如何在没有列表的情况下返回最小的权重吗?
我对房间还是个新手,所以任何帮助都很感激。
美岛
@Dao
interface WeightDao {
@Query("SELECT * FROM weight")
fun getAllWeightEntries():Flow<List<Weight>>
This does returns the lowest weight entry but includes everything else from my data class
@Query("SELECT * FROM weight WHERE weight_entry = (SELECT MIN(weight_entry) FROM weight)")
fun getLowestWeightEntry():Flow<List<Weight>>
My dataclass
@Entity(tableName = "weight")
data class Weight(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
@ColumnInfo(name = "weight_entry")
val weightEntry: Double,
@ColumnInfo(name = "weight_entry_notes")
val weightEntryNotes: String
)
Snippet from my viewmodel
val lowestWeightEntry: LiveData<List<Weight>> = weightDao.getLowestWeightEntry().asLiveData()
snippet from my u.i. fragment
viewModel.lowestWeightEntry.observe(this.viewLifecycleOwner) { item ->
item.let {
binding.tvLowestWeightTest.text = item.toString()
}
}
1条答案
按热度按时间5q4ezhmt1#
我相信你可以使用以下方法:
也就是说,如果输出是一个单列,您可以为该值使用适当的类型(只要它是Room直接支持的列类型之一(即不需要TypeConverter))。
显然,视图模型应该期望检索这种类型的值。
关于此主题的更多信息(非@Entity类型的POJO)
对于除单个值之外的任何值,除了在
@Database
注解的entries
参数中定义的@Entity
注解类(它告诉Room该类是一个表),您需要一个字段名与输出字段名匹配的POJO。比如说你有
您可能会遇到POJO,例如:-
AS
为输出列提供别名(分别为min和max)以适应POJO字段(否则输出列将分别为min(weight_entry)和max(weight_entry))。name
参数覆盖预期的输出列名例如,您可以
您可能会遇到POJO,例如:-
简而言之,对于Query的单值输出,Room不需要将输出列与字段名匹配。对于Query的多值输出,Room需要能够将输出值与接收对象中的相应字段关联起来。