根据子值对Firebase数据库进行排序

时间:2020-02-05 05:40:52

标签: android firebase firebase-realtime-database

我正在使用Firebase创建简单的应用程序。我的Firebase数据库结构是这样的,

user:{ 
   uid:{ 
      name:user1,
      age:22,
      score:80,
      address:mycity,
      uid:uid
   }
},

contact:{ 
   uid:{ 
      phone:123456
   }
}

这是我的数据库参考代码。

mRef = db.getInstance().getReference("user");

mRef.orderByChild("city").equalTo(mycity)
 .addValueEventListener(new ValueEventListener {


   @Override
   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    for (DataSnapshot snapshot: dataSnapshot.getChildren()) {

     HashMap < String, String > hashmap = new HashMap < > ();

     hashmap.put("name", snapshot.child("name").getValue());
     hashmap.put("score", snapshot.child("score").getValue());

     userarr.add(hashmap);

     contact = db.getInstance().getReference("contact").child(snapshot.child("uid").getValue());

     contact.addValueEventListener(new ValueEventListener {

      @Override
      public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       contactHashmap.put("phoneNumber", dataSnapshot.child("phone").getValue());

       contactarr.add(contactHashmap);

      }
      @Override
      public void onCancelled(@NonNull DatabaseError databaseError) {}

     });


     @Override
     public void onCancelled(@NonNull DatabaseError databaseError) {}

    });

  }
 }

我想按“分数”对数据进行排序。如果我在客户端用“比较器”对它进行排序。两个arraylist数据无法匹配。如何通过“得分”对数据进行排序。

对不起,我的英语说得不好。

编辑:我想让用户基于相同的区域(地址)。并根据“得分”对它们进行排序。(升序或降序)

1 个答案:

答案 0 :(得分:0)

尝试这种方式

// Sort by score
Query myTopScoreQuery = databaseReference.child("user").child(mycity).orderByChild("score");
myTopScoreQuery.addChildEventListener(new ChildEventListener() {
    // TODO: implement the ChildEventListener methods as documented above
    // ...
});

// Sort by score
Query myTopScoreQuery = databaseReference.child("user").child(mycity).orderByChild("uid/score");
myTopScoreQuery.addChildEventListener(new ChildEventListener() {
    // TODO: implement the ChildEventListener methods as documented above
    // ...
});