【发布时间】:2019-05-01 04:58:26
【问题描述】:
我正在尝试找出通过 Room by ID 获取单行的最佳方法。我从指南中复制了有关如何获取实体中所有行的代码(Workout 加上所有连接的实体),这对于填充回收视图非常有用。
但是当我需要深入到一个时,目前,我在存储库中的猜测代码是
@WorkerThread
suspend fun getWorkoutById(id: Long): LiveData<WorkoutTree> {
return workoutDao.getWorkoutById(id)
}
在 DAO 中
@Transaction
@Query("SELECT * FROM WORKOUTS WHERE id=:id")
fun getWorkoutById(id: Long): LiveData<WorkoutTree>
我自然会从我的 ViewModel 中调用 repository.getWorkoutById(myId),这样我就可以填充数据并从我的 Activity/Fragment 中引用它。
但我正试图弄清楚我是否走在正确的轨道上以及获取此信息的最佳方式。这是手机本地的数据库,所以老实说,不应该是需要实时更新的问题。
最好只序列化在 Recyclerview 中点击的对象,列出所有行并将其传递到我的活动中,而不用费心按 ID 获取?
我在网上找到的几乎所有关于 Room 和 Android 开发的示例都提供了获取所有行并使用 LiveData 的示例,并且存储库有一个公共属性 LiveData>,该属性由来自实体的所有行的初始 DAO 获取填充。
我很难将这个例子翻译成一个我只取一行的例子。
我真的没有任何功能代码可以分享,因为我真的不知道如何在 Kotlin 和 Room 等中构建它。我以前从未编写过 Android 应用程序,并且来自 Python、JS、Scala 的函数式编程背景,因此我正在努力解决 Kotlin 指南和 Android 指南建议您如何使用所有用于解耦一切的附加类和接口的方法。手机应用。
【问题讨论】:
-
@Query("SELECT * FROM WORKOUTS WHERE id=:id LIMIT 1")? -
ID 是唯一的。我更多的是询问dao和repo和Viewmodel之间的联系,如何传递结果。
-
我应该返回实时数据吗?单身的?可能是?我的 repo 通过 id 获取是否应该返回一个对象,或者 void 并且有一个属于 repo 类的可变对象,当你通过 id 获取时它会更新?这是我的问题:建筑
-
@user1713450 你找到正确的方法了吗?请给我们一个答案。
标签: android kotlin android-room