2017-06-16 8 views
0

Ich bin sehr neu in der asynchronen Programmierung und ich bin ein wenig verwirrt darüber, wie ein Java-Objekt mit einer eindeutigen ID abgerufen wird. Ich habe die Beispiele auf der Firebase-Website zum Strukturieren und Lesen von Daten befolgt, bin mir jedoch nicht sicher, wie ich ein bestimmtes Objekt abrufen kann, ohne die gesamte Liste abzurufen. Ich habe gesehen, wie Leute die gesamte Liste abrufen und sie durchlaufen haben, bis sie das richtige Objekt gefunden haben, aber ich denke, das ist sehr ineffizient und nicht die ideale Methode.Abrufen von Java-Objekt aus Firebase angegebenen UID

My Firebase Datenbank-Struktur

{ 
    "chats" : { 
    "defcon69" : { 
     "chatMembers" : { 
     "abc con" : true, 
     "rGmgSVGcq4WE6kehY4HH5z7ntIQ2" : true 
     }, 
     "chatMessages" : { 
     "-KmYAcmmvmSfMrOYnAtR" : "-KmYAcmmvmSfMrOYnAtR", 
     "-KmYAmNmjWExC1gcCuF8" : "-KmYAmNmjWExC1gcCuF8", 
     "-KmZuNNG6lZCn_HeA1aq" : "-KmZuNNG6lZCn_HeA1aq" 
     }, 
     "chatName" : "FLT", 
     "chatText" : "hey ", 
     "chatTime" : 1497415382731, 
     "chatUUID" : "defcon69" 
    } 
    }, 
    "messages" : { 
    "defcon69" : { 
     "-KmYAcmmvmSfMrOYnAtR" : { 
     "messageText" : "test", 
     "messageTime" : 1497386352516, 
     "messageUUID" : "-KmYAcmmvmSfMrOYnAtR", 
     "messageUser" : "con" 
     }, 
     "-KmYAf3FKCzJyL8-3_9U" : { 
     "messageText" : "hey",  
     "messageTime" : 1497386361825, 
     "messageUUID" : "-KmYAf3FKCzJyL8-3_9U", 
     "messageUser" : "con" 
     } 
    } 
} 

Ich versuche, speziell eine Nachricht Objekt abzurufen gegeben, es ist uid.

Example of iterating through list

Structuring Firebase data

+1

Sie haben einen Link zu einem Bild des JSON-Baums in Ihre Frage eingefügt. Bitte ersetzen Sie dies durch den tatsächlichen JSON als Text, den Sie einfach erhalten, wenn Sie auf den Link JSON exportieren in [Ihrer Firebase-Datenbankkonsole] klicken (https://console.firebase.google.com/project/_/database/data/). . Da der JSON als Text durchsuchbar ist, können wir ihn einfach verwenden, um mit Ihren tatsächlichen Daten zu testen und sie in unserer Antwort zu verwenden, und im Allgemeinen ist dies nur eine gute Sache. –

+0

Es wäre auch gut, wenn Sie einen Teil des Codes gepostet hätten, den Sie bereits ausprobiert haben. Es gibt buchstäblich Hunderte von Beispielen für [Abfrage der Firebase-Datenbank von Android] (https://stackoverflow.com/search?q=%5Bfirebase%5D%5Bandroid%5D+query) hier auf Stack Overflow. Wenn Sie sehen, was Sie ausprobiert haben, können Sie leichter Hilfe geben, wo Sie stecken bleiben. –

+0

@FrankvanPuffelen Ich bin erfolgreich gewesen, das Beispiel zu verwenden, das ich vom Durchlaufen der ganzen Liste zur Verfügung gestellt habe, aber das scheint unglaublich ineffizient zu sein, wenn die Liste in der Länge von Tausenden oder Zehntausenden beginnt. – PleaseNoBugs

Antwort

0

gibt es eine einfache Funktion zu tun, dass ich ein Beispiel teilen

String uid="your uid"; 
    DatabaseReference ref= mDatabase.child("messages").child(uid).getRef(); 

    ref.addValueEventListener(new ValueEventListener() { 

       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        if(dataSnapshot.exists()){ 
        Message m=dataSnapshot.getValue(Message.class); 
        // your message is here do what you want 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 
        Log.i("dberror",databaseError.getMessage()); 
       } 
      }); 

haben Sie Blick auf diese es einfach ist, und wenn Sie Einzelwert wollen Event Listener kann, weil Sie den Wert einmal verwenden möchten, so versuchen Sie

zu verwenden
ref.addListenerForSingleValueEvent(...); 
Verwandte Themen