2017-03-26 5 views
0

Ich versuche, eine Chat-Anwendung mit Firebase-Datenbank zu machen, aber ich habe ein paar Probleme. enter image description here
Dies ist meine Datenbank. Ich möchte den Nachrichten einen Listener hinzufügen, aber nur für die Werte für User->UID->chats->Chat IDs. Wie kann ich das machen? HierFirebase Database nur bestimmte Kinder hören

Antwort

1

Sie müssen es zweimal tun: zuerst die Chat-ID-Liste erhalten, basierend auf Benutzer-ID, dann die Nachrichten-Daten für jede dieser Chat-IDs erhalten.

// consider you have you user (FirebaseUser) object ready 
FirebaseDatabase.getInstance().getReference("Users/" + user.uid + "/chats") 
    .addListenerForSingleValueEvent(new ValueEventListener() { 
     ... onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       FirebaseDatabase.getInstance().getReference("Messages/"+snapshot.getKey()) 
        .addListenerForSingleValueEvent(... 
         ... onDataChange(DataSnapshot messageSnapshot) { 
          // I changed the snapshot name to make it easier to read 
          // here messageSnapshot.getKey() is message ID 
          // and messageSnapshot.getValue() will contain data you need (I think) 
         } 
         ... 
        ); 
      } 
     } 
     ... 
    }); 

hoffe, das hilft

+1

Danke, es funktioniert :) –

0

ist ein Beispiel für den Zugriff auf

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference reference = database.getReference("Messages").child(read); 
+0

was 'read'? –

+0

Ich gab dieses Beispiel basierend auf Ihrem Screenshot, könnte es 'database.getReference (" Nachrichten "). Child();' so können Sie alle Nachrichten in Ihrer Datenbank anzeigen –

+0

Aber wird es nicht die Nachrichten aller Räume ? Ich dachte, dass es keine gute Möglichkeit ist, das zu tun, denn wenn ich eine Nachricht sende, wird jeder Benutzer diese Nachricht erhalten. –