Android 房间返回来自查询的kotlin元组
我使用的是room数据库,我想以kotlin元组的形式查询表列。有人能帮我吗 因此,我有一个名为Android 房间返回来自查询的kotlin元组,android,android-room,android-architecture-components,Android,Android Room,Android Architecture Components,我使用的是room数据库,我想以kotlin元组的形式查询表列。有人能帮我吗 因此,我有一个名为User的表,它有多个字段,现在我想查询两个特定字段first\u name和last\u name和Kotlin元组(成对) @实体(tableName=“user”) 数据类用户( 变量id:String, 变量名:String, 变量姓氏:字符串 //其他一些领域 ) @刀 接口用户DAO{ @查询(“从用户中选择first\u name作为first,last\u name作为second,
User
的表,它有多个字段,现在我想查询两个特定字段first\u name
和last\u name
和Kotlin元组(成对)
@实体(tableName=“user”)
数据类用户(
变量id:String,
变量名:String,
变量姓氏:字符串
//其他一些领域
)
@刀
接口用户DAO{
@查询(“从用户中选择first\u name作为first,last\u name作为second,其中id=:id”)
有趣的getUserName(id:String):配对
}
我得到一个编译器错误,如下所示:
Not sure how to convert a Cursor to this method's return type (kotlin.Pair<java.lang.String,java.lang.String>)
constructor(first_name: String, last_name: String) : this("", first_name, last_name)
不确定如何将游标转换为此方法的返回类型(kotlin.Pair)
这就是您可以实现它的方法
为元组创建类。包括您要获取的所有字段。在您的情况下,名字和姓氏是字段。这一概念称为返回列的子集
UserNameTuple
data class UserNameTuple(
@ColumnInfo(name = "first_name") val firstName: String?,
@ColumnInfo(name = "last_name") val lastName: String?
)
像这样设计查询:
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): List<UserNameTuple>
@Query(“从id=:id的用户中选择名字和姓氏”)
fun getUserName(id:String):列表
您将使用元组数据获得满足查询条件的数据
这是在应用程序中实现它的方法。这是实现它的方法 为元组创建类。包括您要获取的所有字段。在您的情况下,名字和姓氏是字段。这一概念称为返回列的子集 UserNameTuple
data class UserNameTuple(
@ColumnInfo(name = "first_name") val firstName: String?,
@ColumnInfo(name = "last_name") val lastName: String?
)
像这样设计查询:
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): List<UserNameTuple>
@Query(“从id=:id的用户中选择名字和姓氏”)
fun getUserName(id:String):列表
您将使用元组数据获得满足查询条件的数据
这就是如何在应用程序中实现它的方法。您也可以在用户类中使用二级构造函数,如下所示:
Not sure how to convert a Cursor to this method's return type (kotlin.Pair<java.lang.String,java.lang.String>)
constructor(first_name: String, last_name: String) : this("", first_name, last_name)
或者,因为您有更多字段,所以可以使用默认值来避免使用下面的二级构造函数[I put“”,您可以根据需要更改它]:
data class User(
var id: String = "",
var first_name: String = "",
var last_name: String = ""
// some other fields
)
然后像这样修改getUserName
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): User
您还可以在用户类中使用二级构造函数,如下所示:
Not sure how to convert a Cursor to this method's return type (kotlin.Pair<java.lang.String,java.lang.String>)
constructor(first_name: String, last_name: String) : this("", first_name, last_name)
或者,因为您有更多字段,所以可以使用默认值来避免使用下面的二级构造函数[I put“”,您可以根据需要更改它]:
data class User(
var id: String = "",
var first_name: String = "",
var last_name: String = ""
// some other fields
)
然后像这样修改getUserName
@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): User
我试图避免将整个
User
对象重新调谐到getUserName
的使用者。对于如何使用Pair
作为返回类型,还有其他建议吗?您不能使用Pair。您必须使用用户或创建新模型。根据Doc:Room允许您从查询中返回任何基于Java的对象,只要结果列集可以映射到返回的对象中。例如,您可以创建普通的基于Java的旧对象(POJO)来获取用户的名字和姓氏
我试图避免将整个用户
对象重新调谐到getUserName
的使用者。对于如何使用Pair
作为返回类型,还有其他建议吗?您不能使用Pair。您必须使用用户或创建新模型。根据Doc:Room允许您从查询中返回任何基于Java的对象,只要结果列集可以映射到返回的对象中。例如,您可以创建普通的基于Java的旧对象(POJO)来获取用户的名字和姓氏
我知道这个解决方案,这将需要我为查询结果创建额外的数据类
。这就是我试图使用kotlinPair
实现的原因。有没有关于如何实现同样目标的建议?没有,我没有其他解决方案。我想这是唯一的解决方案。这是唯一的解决方案。我知道这个解决方案,这将需要我为查询结果创建额外的数据类。这就是我试图使用kotlinPair
实现的原因。有没有关于如何实现同样目标的建议?没有,我没有其他解决方案。我想这是唯一的解决办法。这是唯一的解决办法。