注释参数必须是编译时常量
An Annotation argument must be a compile time constant
我看到了问题。类似 error.But 在我的情况下它是不同的。
在使用 Room 时,我正在创建 table。它工作正常。
@Daointerface
UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)
@Delete
fun delete(user: User)}
但后来我发现所有 table 名称必须存储在不同的 class 中。 like table name "user" -> 存储在不同的 class.
例如
class Table {
companion object {
const val USER_TABLE = "user"
}}
但是下面的代码不起作用。 它没有从 Table class 中获取 table 名称。给出编译时错误 。 "An Annotation argument must be a compile time constant"请大家帮帮我out.What错在哪
@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>
问题出在错误中,您不能为 @Query
注释动态定义参数。如果要在其他地方定义 table 的名称,请使用字符串连接。你可以这样做:
@Query("SELECT * FROM " + Table.USER_TABLE)
fun getAll(): List<User>
他们在这个 google 示例中就是这样做的。
如果您想在查询中使用列并通过此方法访问它,您还应该在数据 class 和访问中定义列名:
@Query("SELECT * FROM ${Table.USER_TABLE}")
在 Kotlin 中使用带有美元符号的 @Value
注释时需要转义字符串连接(将 \
添加到 $
):
@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>
我看到了
在使用 Room 时,我正在创建 table。它工作正常。
@Daointerface
UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)
@Delete
fun delete(user: User)}
但后来我发现所有 table 名称必须存储在不同的 class 中。 like table name "user" -> 存储在不同的 class.
例如
class Table {
companion object {
const val USER_TABLE = "user"
}}
但是下面的代码不起作用。 它没有从 Table class 中获取 table 名称。给出编译时错误 。 "An Annotation argument must be a compile time constant"请大家帮帮我out.What错在哪
@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>
问题出在错误中,您不能为 @Query
注释动态定义参数。如果要在其他地方定义 table 的名称,请使用字符串连接。你可以这样做:
@Query("SELECT * FROM " + Table.USER_TABLE)
fun getAll(): List<User>
他们在这个 google 示例中就是这样做的。
如果您想在查询中使用列并通过此方法访问它,您还应该在数据 class 和访问中定义列名:
@Query("SELECT * FROM ${Table.USER_TABLE}")
在 Kotlin 中使用带有美元符号的 @Value
注释时需要转义字符串连接(将 \
添加到 $
):
@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>