Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文件室存储库:按ID选择一行_Android_Kotlin_Android Room - Fatal编程技术网

Android 文件室存储库:按ID选择一行

Android 文件室存储库:按ID选择一行,android,kotlin,android-room,Android,Kotlin,Android Room,我正在试图找出通过Room by ID获取单行的最佳方法。我从一本指南中复制了代码,该指南介绍了如何获取实体中的所有行(训练加上所有连接的实体),这对于填充recyclerview非常有效 但当我需要深入到一个时,目前,我在存储库中的猜测代码是 @WorkerThread suspend fun getWorkoutById(id: Long): LiveData<WorkoutTree> { return workoutDao.getWorkoutById(id) } @

我正在试图找出通过Room by ID获取单行的最佳方法。我从一本指南中复制了代码,该指南介绍了如何获取实体中的所有行(
训练
加上所有连接的实体),这对于填充recyclerview非常有效

但当我需要深入到一个时,目前,我在存储库中的猜测代码是

@WorkerThread
suspend fun getWorkoutById(id: Long): LiveData<WorkoutTree> {
    return workoutDao.getWorkoutById(id)
}
@WorkerThread
suspend fun getWorkoutById(id:Long):LiveData{
返回workoutDao.getWorkoutById(id)
}
在刀里呢

@Transaction
@Query("SELECT * FROM WORKOUTS WHERE id=:id")
fun getWorkoutById(id: Long): LiveData<WorkoutTree>
@事务
@查询(“从id=:id的训练中选择*)
fun getWorkoutById(id:Long):LiveData
当然,我会从我的ViewModel调用
repository.getWorkoutById(myId)
,这样我就可以填充数据并从我的活动/片段引用它

但我正试图弄清楚我是否走上了正确的道路,以及获取这些信息的最佳方式。这是一个DB本地的电话,所以不应该是需要实时更新的问题,老实说

只是序列化列出所有行的Recyclerview中点击的对象,并将其传递到我的活动中,而不用费心按ID获取,这样会更好吗

我在网上找到的关于Room和Android开发的几乎每个示例都给出了获取所有行和使用LiveData的示例,存储库有一个公共属性,即LiveData>,由从实体中获取所有行的初始DAO填充

我很难在心里把这个例子翻译成一行


我真的没有任何功能代码可以共享,因为我真的不知道如何在Kotlin和Room中构建它。我以前从未编写过Android应用程序,并且来自Python、JS、Scala的函数式编程背景,因此我一直在苦苦思考Kotlin指南和Android指南如何建议您使用所有用于将手机应用程序的所有内容解耦的附加类和接口来实现这一点。

作为良好实践,您永远不应该,当您只需要部分数据时加载所有数据。 无论这是桌面还是移动应用程序,您都应该始终加载所需的内容。 这说明你走的是对的。 由于您只加载一行,因此不需要
@Transaction
注释。 除此之外,如果使用注释
@PrimaryKey(autoGenerate=true)
声明
id
,那么
getWorkoutById
应该可以正常工作

如果你正在寻找一个关于房间的好教程,你可以做这个简短的免费教程 . 直接跳到第8课,因为它不依赖前面的课程

另一方面,如果你只是想要一个例子,看看。更具体地说,请查看DAO对象。
您将看到这正是您所做的,只是它是用Java编写的。

如果有人仍在搜索
限制
偏移量
在房间+附加
位置
条件下工作正常

@Query("SELECT * FROM ziyaret WHERE uniq= :mUniq LIMIT :limit OFFSET :offset")
    fun getFirstColumn(mUniq: Long, limit: Int, offset: Int): List<Ziyaret>



var first = ziyaretDao.getFirstColumn(myUni, 1, 0) as ArrayList<Ziyaret>
@Query(“从ziyaret中选择*,其中uniq=:mUniq LIMIT:LIMIT OFFSET:OFFSET”)
fun getFirstColumn(mUniq:Long,limit:Int,offset:Int):列表
var first=ziyaretDao.getFirstColumn(myUni,1,0)作为ArrayList

(..,1,0)它将从表中返回第一行,您可以设置范围

@Query(“从训练中选择*,其中id=:id LIMIT 1”)
?id是唯一的。我更多的是问dao和repo以及Viewmodel之间的连接,如何传输结果。我应该返回livedata吗?单身?大概我的repo-get-by-id是否应该返回一个对象,或者是否应该void并具有一个属于repo类的可变项,该类在您使用get-by-id时更新?这是我的问题:architectural@user1713450你找到正确的方法了吗?您能给我们一个答案吗?示例显示:@Query(“SELECT*fromtask,其中id=:id”)TaskEntry loadTaskById(int-id);它不会返回单个LiveData记录。所以答案似乎是不将实时数据用于单个记录,对吗?为什么说它不会返回单个行?如果Id是唯一的,它应该只返回一行…单个LiveData记录。它返回单个对象,这很好。我认为最初的问题是返回一张唱片的最佳方式。在这方面,我对LiveData提出了挑战。我喜欢列表,但不喜欢单个记录,尤其是在我进行一系列操作时。我很高兴这个示例显示了为单记录查询返回的pojo。