es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,>

Tags:  , ,

Answer

  1. Avatar for 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 columna dateSubmitted, 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:

    class TimestampConverter {
        // ...
    
        @TypeConverter
        fun dateToTimestamp(dateString: String?): Date? {
            return if (dateString == null) null else SimpleDateFormat("MM/dd/yyyy", Locale.US).parse(dateString)
        }
    }
    

    Luego, modifica la consulta de Room para ordenar por la fecha completa con el año:

    @Query("SELECT * FROM timeSheet ORDER BY date(dateSubmitted) DESC")
    fun timeSheetsByDate(): PagingSource<int, timesheet="">
    

    Con este enfoque, tu lista debería ordenarse correctamente por la fecha completa, incluido el año.</int,>

Comments are closed.