首页 > 解决方案 > 如何在firebase中比较来自不同UID的积分

问题描述

是否可以比较来自不同的点uid,一个是接收者 uid,另一个是发送者 uid。我想检索这些点并比较这些点,以便我可以决定第 1 天、第 2 天和第 3 天的获胜者。使用云功能或仅在 Android Studio 上怎么可能。请帮帮我。在此处输入图像描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


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

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是发送者receiverId的id,是接收者的id。此代码为您提供了所有日子的赢家。如果您想要每天获胜,只需更改逻辑并比较相应日期的结果即可。

编辑:作为一个结论,你不能查询你的数据库,而无需senderIdreceiverId每场比赛设置 和 ,为此我建议你存储它们。最佳做法是将匹配项存储在一个名为 的新节点中matches。您的数据库结构应如下所示:

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

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


推荐阅读