Ошибка базы данных Android Room: неиспользуемый параметр: дни в функции @Query

Я использую Room databse, пытаясь написать запрос в моем Dao, который удалит все записи старше определенного количества дней. Вот что я пришел:

@Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int) 

Однако, когда я пытаюсь создать свой проект, я получаю сообщение об ошибке в моей консоли Gradle:

ошибка: неиспользуемый параметр: дни

Я использую Kotlin, поэтому он также показывает мне следующее:

Ошибка: выполнение выполнено для задачи ': nexo: kaptDebugKotlin'. Внутренняя ошибка компилятора. Подробнее см. Журнал

Что не так с моим запросом?

ОБНОВИТЬ

Я также получаю сообщение об изменении даты. Вот мой конвертер:

 class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 

Я также добавляю его в свою базу данных с аннотацией:

 @TypeConverters(Converter::class) 

Вот конкретная ошибка, которую я получаю:

Не могу понять, как сохранить это поле в базе данных. Вы можете рассмотреть возможность добавления в него конвертера типов. e: e: private final java.util.Date dateFrom = null;

РЕЗЮМЕ

  1. Я пытался использовать Конвертер с закрытым классом, который в Комнате вызывает проблемы, поэтому я решил сохранить свой параметр даты как Long.

  2. Проверьте ответ Эммануэля С. Должен быть:

     @Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int) 

Я думаю, CW дал ответ уже для вашего вопроса: days.

Вы должны быть указаны как строка, как

 "-20 day" @Query("DELETE FROM my_table WHERE dateFrom <= date('now', :days)") fun deleteAllOlderThan(days: String) 

Если может помочь его не работающий конкат.

Пытаться:

 @Query("DELETE FROM my_table WHERE dateFrom <= date('now', '-' || :days || ' days')") fun deleteAllOlderThan(days: Int) 

Для вашего варианта конвертера вы можете использовать

 @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time 

который работает просто отлично.

Не используйте сопутствующий объект. Просто используйте

 class DBConverters { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 

и добавьте конвертер в ваш абстрактный класс DB, например

 @TypeConverters(DBConverters::class) abstract class YourDb : RoomDatabase() {} 

Об ошибке: неиспользуемый параметр: дни

В настоящее время номер не может читать имя аргумента при использовании Kotlin. Попробуйте вместо этого использовать arg0 или p0, например:

  @Query("DELETE FROM my_table WHERE dateFrom <= date('now','-:arg0 day')") fun deleteAllOlderThan(days: Int) 
Intereting Posts
Могу ли я опустить методы интерфейса, которые я не использую в Котлине? Атрибут свойства lateinit не был инициализирован в Kotlin4Android Вызов функций kotlin, которые являются ключевыми словами в java из java? Kotlin: преобразовать большой список в подсписку заданного размера раздела Храните BaseActivity в Java совместимым с Kotlin Activity Почему Kotlin позволяет иметь два класса с одинаковым именем и пакетом в разных папках (например, main и androidTest)? Нечеткость разрешения перегрузки Котлина в стандартной библиотеке Android SpeechRecognizer не запускается снова Создание цифрового часового класса с использованием Kotlin Как поймать множество исключений в то же время в Котлине Kotlin: Как называются лямбда-аргументы? Как реализовать readLine () !!. ToIntArray () на Kotlin? Как перевести класс Java в класс данных Kotlin Как выполнить экспоненциальную повторную попытку повторения на kotlin coroutines Быстрый способ получить номер месяца от java.util.Date