簡體   English   中英

使用Firebase的實時數據庫-檢索特定信息

[英]Realtime database using firebase - retrieving a specific information

因此,我試圖創建一個實時的多人游戲測驗。 我正在將Google Real-time Multiplayer API與Firebase實時數據庫一起使用。

在游戲開始時,系統會提示用戶問一個問題,並提供兩個答案,其中一個答案是正確的。 然后將此信息發送到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中的日志從數據庫返回兩個不同的問題,因為它遍歷子級。

我如何只獲得與玩游戲的用戶相關的一個問題?

我應該以不同的方式構造它,還是有辦法僅獲取與我相關的值?

無法從查詢中排除特定的子節點。 這意味着(據我所知)您有兩個基本選項:

  1. 讀取兩個子節點,並根據其DataSnapshot.getKey()User.getUid()具有相同的值來刪除自己的節點客戶端。
  2. 只讀其他播放器的子節點。 這要求您以某種方式已經知道其他玩家的鍵/ UID,但是將允許您僅使用DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);加載該玩家的數據DatabaseReference theirRef = database.getReference("Games").child(mRoomId).child(otherPlayerUid);

另請參閱:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM