2017-03-09 43 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 !!! 如果你能给出一个小例子,这个例子最后会列出数据列表,产品类别的值和另一个列表中的各个键值,那么我会对所有人有很大的帮助。 –