【问题标题】:Realtime database using firebase - retrieving a specific information使用 firebase 的实时数据库 - 检索特定信息
【发布时间】:2018-11-19 11:19:08
【问题描述】:

所以我正在尝试创建一个实时多人测验。我正在使用 Google Real-time Multiplayer API 和 firebase 实时数据库。

在游戏开始时,系统会提示用户问自己一个问题并提供两个答案,其中一个答案是正确的。然后将此信息发送到子“游戏”--“mRoomId”--“userId”下的Firebase实时数据库

变量 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 中的日志从数据库返回两个不同的问题,因为它循环遍历子项。

我怎样才能只得到一个相关的问题来呈现给玩游戏的用户?

我应该采用不同的结构,还是有办法只获取与我相关的值?

【问题讨论】:

  • 请添加您现在使用的代码。
  • 您在谈论哪个测验问题(我在您的数据库中看不到任何这样命名的节点),您如何向用户提出问题。请把事情弄清楚,这个问题现在太模棱两可了。
  • 我已经用相关代码更新了我的问题

标签: java android firebase firebase-realtime-database


【解决方案1】:

无法从查询中排除特定子节点。这意味着(据我所知)您有两个基本选择:

  1. 读取两个子节点,并根据其DataSnapshot.getKey()User.getUid() 具有相同值的事实删除您自己的节点客户端。
  2. 只读其他玩家的子节点。这要求您以某种方式已经知道其他玩家的密钥/UID,但允许您使用DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid); 仅加载该玩家的数据

另见:

【讨论】:

  • 1:在我的情况下,getKey 实际上是返回子“mRoomId”,这对于 user1 和 user2 是相同的。 2:我试图找到一种在两个用户(userId)之间轻松共享此信息的方法,但目前我没有运气。它在开发的后期会变得更加复杂,因为它可能还包括 3 或 4 个用户......
猜你喜欢
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2020-07-15
  • 2021-08-22
  • 2018-03-11
  • 2020-08-20
  • 2016-11-20
  • 2017-10-06
相关资源
最近更新 更多