因此,我正在尝试创建实时多人游戏测验。我正在将Google Real-time Multiplayer API与Firebase实时数据库一起使用。
在游戏开始时,系统会提示用户问自己一个问题并提供两个答案,其中1个答案正确。然后,将这些信息发送到Firebase实时数据库中的子“游戏”-“ mRoomId” ---“ userId”
变量uniqueRoomID是玩家从Google API检索的房间的特定ID。
DatabaseReference myRef = database.getReference("Games").child(mRoomId).child(userId);
然后我使用setValue函数将4个值发送到该特定引用。
Upload upload = new Upload(question,answer1,answer2, userId);
myRef.setValue(upload);
我的数据库树如下
我的问题是:
当我稍后在游戏中向其他用户提出问题时,我不想显示自己的问题,只有其他用户的问题相关。
这是我的valueEventListener:
myReference = FirebaseDatabase.getInstance().getReference().child("Games").child(mRoomId);
myReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
这是方法showData();
private void showData (DataSnapshot dataSnapshot){
for(DataSnapshot ds : dataSnapshot.getChildren()){
Upload upload = ds.getValue(Upload.class);
Log.d("TAG", "question1 is " + upload.getQuestion1() );
}
}
showData中的日志从数据库返回两个不同的问题,因为它遍历子级。
我如何只获得与玩游戏的用户相关的一个问题?
我应该采用不同的结构,还是有办法只获取与我相关的值?
答案 0 :(得分:0)
无法从查询中排除特定的子节点。这意味着(据我所知)您有两个基本选项:
DataSnapshot.getKey()
与User.getUid()
具有相同值的事实来删除自己的节点客户端。DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);
另请参阅: