Аргумент Annotation должен быть постоянной времени компиляции - PullRequest
0 голосов
/ 04 июня 2018

я видел этот вопрос.Подобная ошибка. Но в моем случае она другая.

При работе с комнатой я создавал таблицу.это работало нормально.

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

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

@Delete
fun delete(user: User)}

но потом я обнаружил, что все имена таблиц должны храниться в другом классе.как имя таблицы "user" -> Хранится в другом классе.

Например.

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

Но приведенный ниже код не работает. не выбирает имя таблицы из класса Table.Ошибка при компиляции .«Аргумент аннотации должен быть постоянной времени компиляции», пожалуйста, помогите мне. Что в этом плохого

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

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Вы должны определить имя столбца также в классе данных и доступе, если вы хотите использовать столбцы в запросах и обращаться к нему с помощью этого метода:

@Query("SELECT * FROM ${Table.USER_TABLE}")
0 голосов
/ 20 апреля 2019

попробуйте поставить "\" перед "$"

@Query("SELECT * FROM \$Table.USER_TABLE")
fun getAll(): List<User>
0 голосов
/ 04 июня 2018

Проблема указана в ошибке, у вас не может быть динамически определенных аргументов для вашей @Query аннотации.Если вы хотите определить имя таблицы где-то еще, используйте конкатенацию строк.Вы можете сделать это так:

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

Вот как они это делают в этом google образце.

...