Firebase不会返回有序结果

时间:2016-09-12 07:33:59

标签: android firebase firebase-realtime-database

我想从“sortDate”订购Firebase的结果,但实际的是随机排序的。我想按此顺序获取数据:[臀部,胸部,背部,腰部]。这是我的代码:

final DatabaseReference myRef = FirebaseDatabase.getInstance().getReference().child("parts");

        final DatabaseReference user = myRef.child("slavi");
        user.orderByChild("sortDate");

        user.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {

我添加了一个firebase结构的图像。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以将dataSnapshot.getChildren()ValueEventListener一起使用。它将按顺序遍历子快照。它与JS SDK DataSnapshot.forEach具有相似的语义,其中包含更详细的文档。

for (DataSnapshot child : dataSnapshot.getChildren()) {
    Log.i(TAG, "test " + child.getValue());
}

或者您可以使用ChildEventListener为每个子快照按顺序调用onChildAdded

    user.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Log.i(TAG, "test2 " + dataSnapshot.getValue());
                }

                ...

更新:

我看到了你的问题。您没有将侦听器附加到查询引用。

user.orderByChild("sortDate");

user.addListenerForSingleValueEvent(new ValueEventListener() {

应该是:

   user.orderByChild("sortDate").addListenerForSingleValueEvent(new ValueEventListener() {

答案 1 :(得分:0)

当您调用Firebase的任何查询方法(react-native-drawerorderBy...startAt()等)时,您会收到一个新的equalAt()对象。您的代码不会保留对该查询对象的引用。

解决此问题:

Query