use*_*450 6 android kotlin android-room
我试图找出通过 Room 按 ID 获取单行的最佳方法。我已经从指南中复制了有关如何获取实体中的所有行(Workout以及所有连接的实体)的代码,这对于填充回收器视图非常有用。
但是,当前,当我需要深入了解一个时,我在存储库中的猜测代码是
@WorkerThread
suspend fun getWorkoutById(id: Long): LiveData<WorkoutTree> {
return workoutDao.getWorkoutById(id)
}
Run Code Online (Sandbox Code Playgroud)
在 DAO 中
@Transaction
@Query("SELECT * FROM WORKOUTS WHERE id=:id")
fun getWorkoutById(id: Long): LiveData<WorkoutTree>
Run Code Online (Sandbox Code Playgroud)
当然,我repository.getWorkoutById(myId)从我的 ViewModel 调用,这样我就可以填充数据并从我的 Activity/Fragment 引用它。
但我试图弄清楚我是否走在正确的轨道上,以及获取这个的最佳方式。老实说,它是手机本地的数据库,因此不应该存在需要实时更新的问题。
直接序列化 Recyclerview 中列出的所有行中点击的对象并将其传递到我的活动中而不用费心通过 ID 获取会更好吗?
几乎我在网上找到的有关 Room 和 Android 开发的每个示例都提供了获取所有行并使用 LiveData 的示例,并且存储库具有一个公共属性 LiveData>,该属性由从实体中获取所有行的初始 DAO 填充。
我很难在心理上将这个例子翻译成只获取一行的例子。
我实际上没有任何功能代码可以分享,因为我无法真正弄清楚如何在 Kotlin 和 Room 等中构建它。我以前从未编写过 Android 应用程序,并且拥有 Python、JS、Scala 的函数式编程背景,因此我很困惑 Kotlin 指南和 Android 指南如何建议您使用用于解耦所有内容的所有附加类和接口来完成此操作。电话应用程序。
作为一种良好的做法,您永远不应该在只需要部分数据时加载所有数据。无论这是桌面应用程序还是移动应用程序,您都应该始终加载您需要的内容。这说明你走在正确的轨道上。由于您只加载一行,因此@Transaction不需要注释。除此之外,如果id使用注释声明,@PrimaryKey(autoGenerate = true)则getWorkoutById应该可以正常工作。
如果您正在寻找有关 Room 的优秀教程,您可以阅读这个简短的免费教程 Android 架构组件。直接跳到第 8 课,因为它不依赖于之前的课程。
另一方面,如果您只想要一个示例,请查看教程中的这个应用程序。要更具体地查看此处的DAO 对象。您将看到这正是您所做的,只不过它是用 Java 编写的。
| 归档时间: |
|
| 查看次数: |
6465 次 |
| 最近记录: |