firebase startAt()endAt()方法

时间:2017-01-17 03:46:44

标签: java android firebase firebase-realtime-database

我想使用startAt()endAt()方法,但我不完全了解它们是如何工作的。

假设我有当前的数据库

"users" : {
    "someUser1" : {
      "email" : "oneEmail",
      "someOtherInfo" : "OneInfo",
      "username" : "someUser1"
    }
    "someUser2" : {
      "email" : "twoEmail",
      "someOtherInfo" : "twoInfo",
      "username" : "someUser2"
    },
    "someUser3" : {
      "email" : "threeEmail",
      "someOtherInfo" : "threeInfo",
      "username" : "someUser3"
    },
    "someUser4" : {
      "email" : "fourEmail",
      "someOtherInfo" : "fourInfo",
      "username" : "someUser4"
    }
  }

现在这些数据将被附加到RecyclerView上。所以最初我只想获得前2个元素(someUser1someUser2),然后当用户滚动到recyclerView的底部时,它会获得其他2个元素。

recyclerView已完全设置并正常工作,我只需要从DB获取元素,但我不明白这两种方法是如何工作的,如果我这样做的话:

users = myDB.getReference("users").orderByChild("email").startAt(0).endAt(2);

这是否足以获得前两个元素?

感谢

2 个答案:

答案 0 :(得分:2)

您可以limitToLast()执行此操作,以下是代码:

DatabaseReference node;

node.limitToLast(AppConstants.SIZE)
                    .orderByChild(YourOwnSortMethod)
                    .addValueEventListener(mValueEventListener);

private ValueEventListener mTypingValueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            Log.i(TAG, "onDataChange: " + snapshot.getValue());
            // Your code
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Log.w(TAG, "onCancelled: " + error.getMessage());
        }
    };

这是做什么的,

数据集= A,C,B,E,F

orderByChild(升序)= A,B,C,E,F

limitToLast(2)= E,F

答案 1 :(得分:0)

请参阅以下附件:

enter image description here

DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance()
                .getReference();
DatabaseReference mRef = mDatabaseReference.child("order")

node.limitToLast(2).orderByChild("timestamp")
                   .addValueEventListener(mValueEventListener);

private ValueEventListener mTypingValueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            Log.i(TAG, "onDataChange: " + snapshot.getValue());
            // Your code
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Log.w(TAG, "onCancelled: " + error.getMessage());
        }
    };