java - 如何在firebase中比较来自不同UID的积分
问题描述
是否可以比较来自不同的点uid
,一个是接收者 uid,另一个是发送者 uid。我想检索这些点并比较这些点,以便我可以决定第 1 天、第 2 天和第 3 天的获胜者。使用云功能或仅在 Android Studio 上怎么可能。请帮帮我。
解决方案
要解决此问题,请使用以下代码行:
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。此代码为您提供了所有日子的赢家。如果您想要每天获胜,只需更改逻辑并比较相应日期的结果即可。
编辑:作为一个结论,你不能查询你的数据库,而无需senderId
为receiverId
每场比赛设置 和 ,为此我建议你存储它们。最佳做法是将匹配项存储在一个名为 的新节点中matches
。您的数据库结构应如下所示:
Firebase-root
|
--- matches
|
--- matchId
|
--- senderId: true
|
--- receiverId: true
其中matchId
实际是从另一个节点推送的 id -LExD...TXqP
。在这种情况下,您需要先查询您的数据库以获取对手 (senderId
和receiverId
),然后再获取上述结果。所以基本上你需要查询你的数据库两次。
推荐阅读
- python-3.x - 错误:IndentationError:意外缩进
- python-3.x - 使用条件更改熊猫中列的格式
- python - Python - 如何对函数进行 URL 协议调用
- java - 如何将数据存储在一个片段中以获取另一个片段?
- sql - pl/sql 函数返回错误
- windows-machine-learning - LearningModel.LoadFromStorageFileAsync faster_cnn/屏蔽rcnn模型“无法识别的属性:ceil_mode”异常
- python - 如何在熊猫中编辑我的情节的轴标签
- java - 如何在 Android 应用程序中实现 Twirk(Twitch Chat IRC 库)?
- swift - 从另一个 View Controller 访问页面控制以转发页面
- docusignapi - 根据用户选择添加或合并另一个文档或模板