Error de la database de la sala Android: parámetro no utilizado: días en la function @Query

Estoy utilizando Room databse, tratando de escribir una consulta en mi Dao, que eliminará todos los loggings anteriores a la cantidad específica de días. Aquí es a lo que recurro:

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

Sin embargo, cuando bash build mi proyecto, aparece un error en mi console de Gradle:

error: parámetro no utilizado: días

Estoy usando Kotlin, así que también me muestra esto:

Error: ejecución fallida para la tarea ': nexo: kaptDebugKotlin'. Error interno del comstackdor Ver logging para más detalles

¿Qué está mal con mi Query?

ACTUALIZAR

También recibo un error sobre la conversión de Fecha. Aquí está mi convertidor:

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

También lo estoy agregando a mi Base de datos con anotación:

 @TypeConverters(Converter::class) 

Aquí hay un error específico que recibo:

No se puede averiguar cómo save este campo en la database. Puede considerar agregarle un convertidor de tipo. e: e: final privado java.util.Date dateFrom = null;

RESUMEN

  1. Estaba tratando de usar el convertidor con class sellada que en la sala causa problemas, así que decidí mantener mi parámetro de date como largo.

  2. Verifique la respuesta de Emmanuel S. Debería ser:

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

Creo que CW ya dio la respuesta para su problema de días.

Tus días deben citarse como una cadena como

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

Si no funciona, concat puede ayudar.

Tratar:

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

Para su problema con el convertidor, es posible que desee utilizar

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

que funciona bien

No uses un object compañero. Solo usa

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

y agrega el convertidor a tu class abstracta de DB como

 @TypeConverters(DBConverters::class) abstract class YourDb : RoomDatabase() {} 
  • Cómo anotar una columna como NOT NULL utilizando Android Room Persistence Library
  • IlegalStateException donde se lanzó, al intentar recuperar los valores de la instancia de RoomDatabase
  • Base de datos de android de Kotlin: no se puede convertir java.lang.String en android.database.Cursor
  • Kotlin Closable y SQLiteDatabase en Android
  • No se puede acceder a BaseColumns proporciona la propiedad _ID en Kotlin