2017-01-13 13 views
1

特定の鍵の下でメッセージデータを取得したい。しかし、私は鍵を取得する方法はありません。助けてください、私は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

JSONツリーにアクセスするには、DataSnapshotメソッドを使用する必要があります。 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

その後、親ノードに移動し、チャット相手が実際にあなたがいるDataSnapshotのキーなので、 'getKey()'メソッドを使用します。 –

+0

そのためにgetRef()。getKey()を使用できます。残念ながら、現時点では自分のシステムにFirebase Appをセットアップしていないので、自分でテストする必要があります@elbertrivas –

1

パスを間違って作成していて、ツリーの別の部分を反復する可能性があります.1つ上のレベルはchild-matesです。その場合、child-matesが子キーであることは間違いありません。あなたが参照を作成するときに

問題は、最後のchild()の呼び出しである:

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

ありconverstation下の子chat-matesはありませんので、このrefは正しくありません。

あなたはおそらくこれをしたい:

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の推奨事項の1つにこのデータ構造を適用しています。 Firebaseは、ここでのやり方でデータタイプを入れ子にすることをお勧めします。

より多くの非正規化データモデルは次のようになります。

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

この方法であなたはメッセージ自体にアクセスする(あるいはへのアクセス権を持っている必要)せずに、チャットで仲間/参加者を得ることができます。

+0

これは私の問題を解決しました。私はjsonの構造がどれほど複雑かを知った。どうもありがとうございます。 @フランク・ヴァン・プフレン –

関連する問題