是否可以比较来自不同uid
的点,一个是接收器uid,另一个是发送器uid。我想要回顾这些要点,并想比较这些要点,以便我可以决定第1天,第2天和第3天的获胜者。
如何通过云功能或仅在Android工作室上实现。
请帮帮我。
答案 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。此代码为您提供了所有日子的赢家。如果您想要每天获胜者,只需更改逻辑并比较相应日期的结果。
修改:总之,如果没有每个游戏的senderId
和receiverId
,就无法查询您的数据库,我建议您存储它们。最佳做法是将匹配项存储在名为matches
的新节点中。您的数据库结构应如下所示:
Firebase-root
|
--- matches
|
--- matchId
|
--- senderId: true
|
--- receiverId: true
其中matchId
实际上是来自其他节点-LExD...TXqP
的推送ID。在这种情况下,您需要先查询数据库以获取对手(senderId
和receiverId
),然后按上述说明获取结果。所以基本上你需要两次查询你的数据库。