首页 文章

firebase startAt()endAt()方法

提问于
浏览
0

我想使用 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

    你可以通过 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

  • 2

    请参阅以下附件:

    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());
            }
        };
    

相关问题