2016-11-27 1 views
1

Ich habe eine Firebase-Knotenstruktur wie folgt.Firebase-Daten sortieren nach Zeitstempel

categories 
    category1 
     timestamps 
      23c491sdfwrasddgasd: true 
      asdf8234dfjalskdask: true 
      39fsdizxcasfgbskdf7: true 
      2asqwizxov340bs9fms: true 
    category2 
     timestamps 
      p23491sdfwrasddgasd: true 
      asdfpovaskdrfskdask: true 
    category3 
     timestamps 
      vmk339ffk3rasddgasd: true 
      asdf8234dfjalskdvml: true 
      bnwdwizxcasfgbskdf7: true 

die Zeitstempel-Tasten sind die von push() erzeugten Schlüssel. Ich muss die Kategorien nach dem ältesten Zeitstempelschlüssel sortieren, den sie haben. Nur der älteste Zeitstempel vom Zeitstempelknoten zählt.

Grundsätzlich muss ich die Kategorien nach der Zeit, die sie zum ersten Mal geändert wurden, sortieren.

Jede Hilfe ist willkommen einschließlich Tipps zum Redesign des Knotens.

Antwort

1

Haben Sie über Ihre Datenbank nachgedacht? Ihre Datenbank-Design ändern:

Kategorien

category1 
    oldest_timestamp: 2asqwizxov340bs9fms 
    timestamps 
     23c491sdfwrasddgasd: true 
     asdf8234dfjalskdask: true 
     39fsdizxcasfgbskdf7: true 
     2asqwizxov340bs9fms: true 
    category2 
    oldest_timestamp: asdfpovaskdrfskdask 
    timestamps 
     p23491sdfwrasddgasd: true 
     asdfpovaskdrfskdask: true 
    category3 
    oldest_timestamp: bnwdwizxcasfgbskdf7 
    timestamps 
     vmk339ffk3rasddgasd: true 
     asdf8234dfjalskdvml: true 
     bnwdwizxcasfgbskdf7: true 

Grundsätzlich haben Sie einen Knoten namens "oldest_timestamp" hinzugefügt. Jetzt können Sie Ihre Kategorien einfach mit einer Abfrage sortieren.

Query myquery = FirebaseDatabase.getInstance().getReference().child("categories").orderByChild("oldest_timestamp"); 

Vergessen Sie nicht, das in Ihren Firebase-Datenbankregeln für bessere Leistung zu indizieren.

+0

Momentan schiebe ich immer einen Wert, wenn ich die Kategorie ändere. Wie kann ich feststellen, ob die Kategorie bereits geändert wurde? Muss ich die Kategorie zuerst mit einem Wert-Listener überprüfen? –

+0

Ja, Sie können dies mit einem ValueEventListener und mit dataSnapshot.exists() am Zeitstempelstandort ausführen. Aber es ist schwer zu sagen, weil ich den gesamten Kontext der App nicht kenne – Hhorn