Clasificación de descripciones de datos de Firebase en Android

Resuelto Farrukh Okhunov asked hace 54 años • 19 respuestas

Estoy almacenando datos en el almacenamiento de Firebase.

Objeto Commentcon atributo timestamp. Cuando envío datos desde el dispositivo a Firebase, los completo timestampcon currentTime y los almaceno en el longtipo de datos.

Cuando recupero los datos con firebaseRef.orderByChild("timestamp").limitToLast(15)el resultado, no los ordeno como esperaba.

Incluso jugué con las reglas y no obtuve resultados:

{
    "rules": {
        ".read": true,
        ".write": true,
        ".indexOn": "streetrate",
        "streetrate": {
          ".indexOn": ".value"
        }
    }
}

Intenté almacenar timestampen Stringtipo de datos, el mismo problema.

Farrukh Okhunov avatar Jan 01 '70 08:01 Farrukh Okhunov
Aceptado

Firebase puede ordenar los elementos en orden ascendente según una propiedad determinada y luego devuelve los primeros N elementos ( limitToFirst()) o los últimos N elementos ( limitToLast()). No hay forma de indicar que desea los elementos en orden descendente.

Hay dos opciones para obtener el comportamiento que desea:

  1. Utilice una consulta de Firebase para obtener los datos correctos y luego vuelva a ordenarlos en el lado del cliente.

  2. Agregar un campo que tenga un valor descendente a los datos

Para este último enfoque, es común tener una marca de tiempo invertida.

-1 * new Date().getTime();
Frank van Puffelen avatar Dec 08 '2015 14:12 Frank van Puffelen

No veo ninguna opción para revertir los datos. Pero la forma One Brute es obtener los datos.

List<ModelClass> mList=new ArrayList();
public void onDataChange(DataSnapshot dataSnapshot) 
{
     mList.clear();
     for(DataSnapshot children: dataSnapshot.getChildren()){
        ModelClass modelClass=children.getValue(ModelClass.class);
        mList.add(modelClass);
     }
     Collections.reverse(mList);
     Adapter.notifyDataSetChanged();
}
Himanshu Rawat avatar Sep 21 '2017 17:09 Himanshu Rawat