Tar*_*run 8 android kotlin android-room android-architecture-components android-jetpack
我已经看到了这个问题。类似的错误,但就我而言是不同的。
与Room一起工作时,我正在创建桌子。工作正常。
@Daointerface
UserDao {
@Query("SELECT * FROM user")
fun getAll(): List<User>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(user: User)
@Delete
fun delete(user: User)}
Run Code Online (Sandbox Code Playgroud)
但后来我发现所有表名都必须存储在不同的类中。如表名“用户”->存储在不同的类中。
例如。
class Table {
companion object {
const val USER_TABLE = "user"
}}
Run Code Online (Sandbox Code Playgroud)
但是下面的代码不起作用。它不是从Table类中获取表名。给出编译时错误。“ Annotation参数必须是编译时间常数”,请帮帮我。
@Query("SELECT * FROM $Table.USER_TABLE")
fun getAll(): List<User>
Run Code Online (Sandbox Code Playgroud)
小智 8
你需要使用的时候逃跑的字符串连接@Value注释与科特林(前置美元符号\来$):
@Query("SELECT * FROM \$Table.USER_TABLE")
fun getAll(): List<User>
Run Code Online (Sandbox Code Playgroud)
问题是错误中所述的问题,您不能为@Query注释动态定义参数。如果您想在其他地方定义表的名称,请使用字符串连接。你可以这样做:
@Query("SELECT * FROM " + Table.USER_TABLE)
fun getAll(): List<User>
Run Code Online (Sandbox Code Playgroud)
这就是他们在这个谷歌示例中的做法。
| 归档时间: |
|
| 查看次数: |
8132 次 |
| 最近记录: |