2017-03-09 44 views
0
工作使用

查詢:排序按日期負時間戳不火力地堡

q = FirebaseDatabase.getInstance().getReference().child("products").orderByChild("timestamp"); 
q.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onCancelled(DatabaseError databaseError) { 
    } 

    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Log.d("datasnapshot", dataSnapshot.toString()); 

該值是在相同的順序我的火力地堡的數據庫。

注意:我使用負值方法{ -1 * new Date().getTime();}來存儲時間戳。

該值是在相同的順序我的火力地堡數據庫:

Ke7K4vXyEt4gKnjf68H
時間戳:-1488345920790
Ke7KB2F1UKh8LoWcCY3
時間戳:-1488345945825
KeHlQIBnOE3diP8Wksh
時間戳:-1488521122407
KeI9nJtt4eg5Vd0rcAv
時間戳:-1488527774123
KeWwWW_ezG-cjmF8TNO
時間戳:-1488775680799
KeX7G0WOVidrMBbuGiT
時間戳:-1488778758960
Keg3mtNpyKStpVMMvRm
時間戳:-1488945623757
Keg4fN3rAN7uy5weFJz
時間戳:-1488945855094

以下順序是我所得到的,當我打印datasnapshot:

KeX7G0WOVidrMBbuGiT
t imestamp:-1488778758960
Keg3mtNpyKStpVMMvRm
時間戳:-1488945623757
Keg4fN3rAN7uy5weFJz
時間戳:-1488945855094
Ke7K4vXyEt4gKnjf68H
時間戳:-1488345920790
KeWwWW_ezG-cjmF8TNO
時間戳:-1488775680799
KeHlQIBnOE3diP8Wksh
時間戳: - 1488521122407
Ke7KB2F1UKh8LoWcCY3
時間戳:-1488345945825
KeI9nJtt4eg5Vd0rcAv
時間戳:-1488527774123

回答

1

當您執行對火力地堡數據庫查詢,返回三個信息爲每個匹配節點:

  1. 的該值節點
  2. 該節點的密鑰
  3. 該節點相對於結果中的其他節點的順序

打印快照時,實際上是打印查詢結果的Map<String, Object>。在地圖中,只有兩個信息空間:每個節點的密鑰和該節點的值。因此,打印結果時節點的順序會丟失。

出於這個原因,你應該重複的進行結果的兒童內置getChildren()方法快照:

public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot child: dataSnapshot.getChildren()) { 
     Log.d("datasnapshot", child.getKey()+": "+child.getValue()); 
    } 
} 

而與此,你會看到孩子們在他們的時間戳的順序。

如果你想保持他們在列表中(這樣的順序保持不變),我建議乾脆保持快照列表:

public void onDataChange(DataSnapshot dataSnapshot) { 
    List<DataSnapshot> list = new LinkedList<DataSnapshot>(); 
    for (DataSnapshot child: dataSnapshot.getChildren()) { 
     Log.d("datasnapshot", child.getKey()+": "+child.getValue()); 
     list.add(child); 
    } 
} 
+0

的HashMap <字符串,產品> HASHMAP =新的HashMap <字符串,製品>(); 爲(DataSnapshot jobSnapshot:dataSnapshot.getChildren()){ 產品作業= jobSnapshot.getValue(products.class); hashMap.put(jobSnapshot.getKey(),job); } Log.d(「Hashmap」,hashMap.toString()); 即使這返回了相同的順序:( –

+0

如上所述:一個Map是無序的,所以你使用的HashMap也是無序的如果你想要一個包含鍵和值的有序版本,可以使用一個'List '。 –

+0

非常感謝你Puf !!! 如果你能給出一個小例子,這個例子最後會列出數據列表,產品類別的值和另一個列表中的各個鍵值,那麼我會對所有人有很大的幫助。 –