Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 时间戳为负的订单按日期在Firebase中不起作用_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 时间戳为负的订单按日期在Firebase中不起作用

Android 时间戳为负的订单按日期在Firebase中不起作用,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,使用的查询: q = FirebaseDatabase.getInstance().getReference().child("products").orderByChild("timestamp"); q.addValueEventListener(new ValueEventListener() { @Override public void onCancelled(DatabaseError databaseError) { } @Override

使用的查询:

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());
此值在我的Firebase数据库中的顺序相同

注意:我使用负值方法{-1*new Date.getTime;}来存储时间戳

此值在我的Firebase数据库中的顺序相同:

Ke7K4vXyEt4gKnjf68H 时间戳:-1488345920790 KE7KB2F1UKH8LOWCY3 时间戳:-1488345945825 KeHlQIBnOE3diP8Wksh 时间戳:-1488521122407 KEI9NJT4EG5VD0RCAV 时间戳:-1488527774123 KeWwWW_ezG-cjmF8TNO 时间戳:-1488775680799 KEX7G0WOVIDMBUGIT 时间戳:-1488778758960 Keg3mtNpyKStpVMMvRm 时间戳:-1488945623757 Keg4fN3rAN7uy5weFJz 时间戳:-1488945855094

以下是我打印datasnapshot时得到的顺序:

public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot child: dataSnapshot.getChildren()) {
        Log.d("datasnapshot", child.getKey()+": "+child.getValue());
    }
}
KEX7G0WOVIDMBUGIT 时间戳:-1488778758960 Keg3mtNpyKStpVMMvRm 时间戳:-1488945623757 Keg4fN3rAN7uy5weFJz 时间戳:-1488945855094 Ke7K4vXyEt4gKnjf68H 时间戳:-1488345920790 KeWwWW_ezG-cjmF8TNO 时间戳:-1488775680799 KeHlQIBnOE3diP8Wksh 时间戳:-1488521122407 KE7KB2F1UKH8LOWCY3 时间戳:-1488345945825 KEI9NJT4EG5VD0RCAV
时间戳:-1488527774123

对Firebase数据库执行查询时,它会为每个匹配节点返回三条信息:

该节点的值 该节点的键 该节点相对于结果中其他节点的顺序 打印快照时,实际上是在打印查询结果的映射。在地图中,只有两条信息的空间:每个节点的键和该节点的值。因此,打印结果时节点的顺序将丢失

因此,应使用快照的内置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);
    }
}

HashMap HashMap=新的HashMap;对于DataSnapshot jobSnapshot:DataSnapshot.getChildren{products job=jobSnapshot.getValueproducts.class;hashMap.putjobSnapshot.getKey,job;}Log.dHashmap,hashMap.toString;即使这样,也返回了相同的顺序:如前所述:地图是无序的。因此,您使用的HashMap也是无序的。如果您想要一个包含键和值的有序版本,请使用列表。非常感谢您的Puf!!!如果您能在本例中给出一个小示例,在另一个列表中包含数据列表、products类的值和相应的键,我将非常有帮助。@Puf-我们如何使用ServerValue.timestamp存储负时间戳?