2017-01-13 67 views
1

我想檢索特定密鑰下的消息數據。但我不知道如何獲得關鍵。請幫忙,我是firebase的新手。如何獲取Firebase中的密鑰

在我的情況下,我想要得到下面圍繞的關鍵。

我已經嘗試過下面這段代碼,但是這會返回「chat-mates」而不是密鑰。

enter image description here

final DatabaseReference ref =FirebaseDatabase.getInstance().getReference().child("chat").child("single-chat").child("converstation").child("chat-mates"); 

    ref.orderByChild("receiverName").equalTo("Liza Soberano").addListenerForSingleValueEvent(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot child: dataSnapshot.getChildren()){ 
       String key = child.getKey(); 
       Log.e("Key", key); 
      } 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

我曾嘗試下面這段代碼,但是這將返回「聊天隊友」並不是關鍵。

回答

5

您必須使用DataSnapshot方法訪問JSON樹。 DataSnapshot元素有一個稱爲getKey()的方法。這返回一個對象的關鍵。

官方文件:DataSnapShot getKey() method

示例代碼:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(); 
     ref.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       for (DataSnapshot objSnapshot: snapshot.getChildren()) { 
         Object obj = objSnapshot.getKey(); 
       } 
      } 
      @Override 
      public void onCancelled(DatabaseError firebaseError) { 
       Log.e("Read failed", firebaseError.getMessage()); 
      } 
     }); 

在你的情況下,首先到達的子節點 「對話」,然後應用上述方法getKey()

+0

我曾嘗試使用DataShapshot,但我不知道如何實現基於我的json樹的邏輯。順便提一下,我已經編輯了我的問題。 @AseedUsmani –

+0

然後轉到父節點,然後使用'getKey()'方法,因爲chat-mates實際上就是您所在的DataSnapshot的關鍵。 –

+0

您可以使用getRef()。getKey()來達到此目的。不幸的是,我目前沒有在我的系統上安裝Firebase應用程序,因此您必須親自測試@elbertrivas –

1

您正在構建您的路徑錯誤,並可能最終迭代樹的不同部分,高於child-mates的一個級別。在這種情況下,child-mates是一個子鑰匙是正確的。

的問題是,在過去child()呼叫,當您創建裁判:

final DatabaseReference ref =FirebaseDatabase.getInstance().getReference() 
    .child("chat") 
    .child("single-chat") 
    .child("converstation") 
    .child("chat-mates"); 

沒有孩子chat-matesconverstation下,所以這個裁判不會是正確的。

你可能想這樣做:

final DatabaseReference ref =FirebaseDatabase.getInstance().getReference() 
    .child("chat") 
    .child("single-chat") 
    .child("converstation"); 

ref.orderByChild("chat-mates/receiverName") 
    .equalTo("Liza Soberano") 
    .addListenerForSingleValueEvent(new ValueEventListener() { 

這將在chat-mates/receiverName孩子每個聊天的篩選。

請注意,您違背了Firebase有關此數據結構的建議之一。 Firebase建議不要按照您在此處的方式嵌套數據類型。

更非規範化的數據模型是:

chat-mates 
    $chatRoomId 
    receiverName 
    senderName 
chat-messages 
    $chatRoomId 
    $messageId 

這樣你就可以得到配偶/參與者在聊天,而無需訪問(甚至需要能夠訪問)消息本身。

+0

這解決了我的問題。我意識到我的json結構有多複雜。非常感謝。 @Frank van Puffelen –