Obtención de datos ordenados por fecha con Room y Paging 3
Cuando obtengo la lista almacenada, obtengo este patrón:
["12/08/2021", "12/07/2021", "12/08/2020", "11/07/2021", "11/05/2021"]
Como puedes ver, el mes y el día están ordenados, pero parece que el año no se está leyendo.
A continuación se muestra la consulta que estoy utilizando con Room:
@Query("SELECT * FROM timeSheet ORDER BY date DESC")
fun timeSheetsByDate(): PagingSource<int, timesheet="">
Aquí hay un video de ello: Enlace al video
Luego intenté con @TypeConverters
:
@Query("SELECT * FROM timeSheet ORDER BY date(date) DESC")
fun timeSheetsByDate(): PagingSource<int, timesheet="">
@Entity(tableName = "timeSheet")
data class TimeSheet(
@PrimaryKey var id: String = "",
@ColumnInfo(name = "date")
@TypeConverters(TimestampConverter::class)
var dateSubmitted: String? = null
)
Clase TimestampConverter
:
class TimestampConverter {
@TypeConverter
fun fromTimestamp(value: Long?): Date? {
return if (value == null) null else Date(value)
}
@TypeConverter
fun dateToTimestamp(dateString: String?): Date {
val format = TimeFormatter()
val date = Calendar.getInstance()
date.time = format.date(dateString)!!
return date.time
}
}
Pero por alguna razón, al actualizar los datos por segunda vez, no muestra los valores de la primera página, así que tengo que desplazarme hacia abajo hasta que se carguen completamente todos los datos, y luego, cuando vuelvo a desplazarme hacia arriba, puedo ver los valores de la primera página.
Aquí hay un video de ello: Enlace al video</int,></int,>
davy.ai
El problema parece estar con la función
date()
en la consulta de Room. Esta función se utiliza para extraer la parte de la fecha de un valor de fecha y hora. En este caso,date(date)
está devolviendo solo la parte de la fecha de la columnadateSubmitted
, que no incluye el año.Para solucionar este problema, puedes modificar
TimestampConverter
para analizar la cadena de fecha completa, incluido el año, en lugar de solo la parte de la fecha. De esta manera, puedes ordenar los datos por la fecha completa, incluido el año. Por ejemplo:Luego, modifica la consulta de Room para ordenar por la fecha completa con el año:
Con este enfoque, tu lista debería ordenarse correctamente por la fecha completa, incluido el año.</int,>