2017-09-07 32 views
1

I持ってFirebaseで、次のデータベース構造:Firebase Androidはキー子で値を取得

firebase structure

「ユーザー」にオブジェクトにキーが含まれている場合、私は「チャット」からすべてのオブジェクトを取得したいと思います」 user2 "とする。 構造が変更されずに書かれたデータをダウンロードすることは可能ですか?Firebase?

私の実際のコードデータを取得する:

DatabaseReference chatReference = FirebaseDatabase.getInstance().getReference("conversationsNew"); 
chatReference.orderByChild("users").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       Log.d("TAG", dataSnapshot.getChildrenCount()); 
       for (DataSnapshot chat : dataSnapshot.getChildren()) { 
        Log.d("TAG", chat.toString()); 
        Chat chat = chat.getValue(Chat.class); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

はどうもありがとうございました。

答えて

0

DatabaseReference chatReference = FirebaseDatabase.getInstance().getReference("chats"); 
chatReference.orderByChild("users/user1").equalTo(true).addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot chat: dataSnapshot.getChildren()) { 
       Log.d("TAG", chat.getKey()); 
       Chat chat = chat.getValue(Chat.class); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      throw databaseError.toException(); // don't ignore errors 
     } 
    }); 

これが印刷されます:あなたは、インデックスを追加する必要がありますので、

chat1

しかし、このアプローチは、スケールません。各ユーザー。これを防ぐには、ユースケースをより詳しく示すデータ構造が必要です。したがって、現在のユーザーがいるチャットのリストを表示する場合は、各ユーザーのチャットのリストを正確に保存する必要があります。アレックスの答えは、そのようなデータを保存する最も一般的な方法を示しています。

0

いいえ、コードを使用してこれを達成する可能性はありません。あなたの代わりに何ができるか、このように新しいノードを追加することによって、少しあなたのデータベース構造を変更することです:

Firebase-root 
    --- users 
     --- userId1 
     --- userName: John 
     --- chats 
      --- chat1: true 

はこの持つ、あなたは、ユーザーが所属するチャットを取得するためにデータベースを照会することができます。存在を確認するには、dataSnapshotオブジェクトのexists()メソッドを使用する必要があります。

希望します。かなり可能だ

関連する問題