如何比较firebase中不同Uid的点数

时间:2018-06-14 09:28:35

标签: java android firebase firebase-realtime-database

是否可以比较来自不同uid的点,一个是接收器uid,另一个是发送器uid。我想要回顾这些要点,并想比较这些要点,以便我可以决定第1天,第2天和第3天的获胜者。 如何通过云功能或仅在Android工作室上实现。 请帮帮我。enter image description here

1 个答案:

答案 0 :(得分:2)

要解决此问题,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference challengeRef = rootRef.child("Challenge");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            int senderPointsDayOne = ds.child(senderId).child("points").child("Day1").getValue(Integer.class);
            int senderPointsDayTwo = ds.child(senderId).child("points").child("Day2").getValue(Integer.class);
            int senderPointsDayThree = ds.child(senderId).child("points").child("Day3").getValue(Integer.class);

            int receiverPointsDayOne = ds.child(receiverId).child("points").child("Day1").getValue(Integer.class);
            int receiverPointsDayTwo = ds.child(receiverId).child("points").child("Day2").getValue(Integer.class);
            int receiverPointsDayThree = ds.child(receiverId).child("points").child("Day3").getValue(Integer.class);

            int senderTotal = senderPointsDayOne + senderPointsDayTwo + senderPointsDayThree;
            int receiverTotal = receiverPointsDayOne + receiverPointsDayTwo + receiverPointsDayThree;

            if(senderTotal > receiverTotal) {
                //sender is the winner
            } else if (senderTotal < receiverTotal) {
                //receiver is the winner
            } else {
                //it's even
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
challengeRef.addListenerForSingleValueEvent(valueEventListener);

其中senderId是发件人的ID,receiverId是接收者的ID。此代码为您提供了所有日子的赢家。如果您想要每天获胜者,只需更改逻辑并比较相应日期的结果。

修改:总之,如果没有每个游戏的senderIdreceiverId,就无法查询您的数据库,我建议您存储它们。最佳做法是将匹配项存储在名为matches的新节点中。您的数据库结构应如下所示:

Firebase-root
   |
   --- matches
         |
         --- matchId
               |
               --- senderId: true
               |
               --- receiverId: true

其中matchId实际上是来自其他节点-LExD...TXqP的推送ID。在这种情况下,您需要先查询数据库以获取对手(senderIdreceiverId),然后按上述说明获取结果。所以基本上你需要两次查询你的数据库。