Firebase查询不会显示所有数据

时间:2018-07-31 03:28:32

标签: java android firebase firebase-realtime-database

我需要确定年龄段的所有用户,但是我的代码无法正常工作。

我的Firebase数据库结构是这个。

-user
   -1
      -name:"James"
      -age:"21"

   -2
      -name:"Artur"
      -age:"25"

   -3
      -name:"Charlotte"
      -age:"25"

   -3
      -name:"Marvin"
      -age:"80"

我的代码是这个。有了这个,我只抓到1个用户。

DatabaseReference uRef = database.getReference("users");

Query UserQuery = uRef.orderByChild("age").startAt(21).endAt(50);

    UserQuery.limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            int counter =(int) dataSnapshot.getChildrenCount();

            Log.d("TAG////////", String.valueOf(counter));




        }


        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

但是,如果我删除endAt()条件,则会在21岁之后捕获所有用户,而我只是想捕获该范围内的用户。

DatabaseReference uRef = database.getReference("users");

Query UserQuery = uRef.orderByChild("age").startAt(21); //I deleted endAt(50);

    UserQuery.limitToFirst(10).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            int counter =(int) dataSnapshot.getChildrenCount();

            Log.d("TAG////////", String.valueOf(counter));




        }


        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

请帮助我。

1 个答案:

答案 0 :(得分:3)

您似乎将年龄存储为字符串值,因此还应该将字符串传递给查询:

Query UserQuery = uRef.orderByChild("age").startAt("21").endAt("50");

请注意,当您希望每个人都从2岁到5岁时,这都会导致问题,因为在字典编排排序中看起来像这样:

"18"
"19"
"2"
"20"
"21"
"22"
...
"29"
"3"
"30"
"31"
...

因此,您可能希望通过将年龄存储为实际数字值而不是将其存储为字符串来解决此问题。