其他分享
首页 > 其他分享> > 注释参数必须是编译时间常数

注释参数必须是编译时间常数

作者:互联网

我看过this问题.类似的错误,但就我而言是不同的.

与Room一起工作时,我正在创建桌子.工作正常.

@Daointerface 
UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)

@Delete
fun delete(user: User)}

但后来我发现所有表名都必须存储在不同的类中.像表名称“用户”一样->存储在不同的类中.

例如.

class Table {
companion object {
    const val USER_TABLE = "user"
}}

但是下面的代码不起作用.它不是从Table类中获取表名.给出编译时错误. “ Annotation参数必须是编译时间常数”,请帮帮我.

@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>

解决方法:

问题是错误中指出的问题,您无法为@Query注释动态定义参数.如果要在其他地方定义表的名称,请使用字符串串联.您可以这样做:

@Query("SELECT * FROM " + Table.USER_TABLE)
fun getAll(): List<User>

这就是他们在此google示例中所做的.

标签:android-room,android-architecture-components,android-jetpack,kotlin,android
来源: https://codeday.me/bug/20191109/2010609.html