2017-09-05 10 views
0

Ich möchte einen bestimmten Wert mit Hilfe von DataSnapshot erhalten.
Ich befestige den Screenshot hier, also bitte überprüfen Sie und helfen Sie mir, einen bestimmten Wert von Realtime Database zu erhalten.
enter image description hereSo erhalten Sie einen bestimmten Wert mit `DataSnapshot` in` Firebase`

Eigentlich bin die Umsetzung I chat Anwendung, in der ich mag Wert von user von group_list bekommen. Hier ist mein Code.

private void loadTotalGroupList() { 

     referenceMainUrl = FirebaseDatabase.getInstance().getReferenceFromUrl("https://pure-coda-174710.firebaseio.com"); 
     referenceGroupList = referenceMainUrl.child("group_list"); 

     //Check if child is available or not. 
     referenceGroupList.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       if (dataSnapshot.exists()) { 


        Log.e("dataSnapshot"," ==>"+dataSnapshot); 
        Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue(); 

        Log.e("newPost"," ==>"+newPost); 

        Log.e("user: ","==>" + newPost.get("user")); // Here I am getting null value 


       } else { 
        Log.e("Child not found", " >>>"); 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
    } 

und log zeigt dies. DataSnapshot {key = GROUP_LIST, value = {Erste Group = {- KtBH9gnTszNxcXjNu9A = {message = assaasas, user = Sakib}}}}

Antwort

0

ich beschlossen habe meine Ausgabe von addChildEventListener

referenceGroupList.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) { 



      Log.e("dataSnapshot KEY", " ==>" + dataSnapshot.getKey()); 

     } 
     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) { 
     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) { 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 

Hier dataSnapshot.getKey() kehrt alle Unter Kind davon verwenden.

0

Sie an den Ort /group_list in Ihrem Code zu hören. Das bedeutet, aa Schnappschuss von diesem Standort werden folgende Angaben enthalten:

/First Group 
    /-KtBH9gnTszNxcXjNu9A 
     message = "..." 
     user = "..." 

Wenn Sie den Benutzer Wert von diesem Ort zu bekommen, werden Sie in sie graben, um jeden Zwischen Pfad:

dataSnapshot.child("First Group").child("-KtBH9gnTszNxcXjNu9A").child("user").getValue() 

Oder einfacher:

dataSnapshot.child("First Group"/-KtBH9gnTszNxcXjNu9A/user").getValue() 

Sie können die mittleren Pfade im Snapshot nicht überspringen. Alternativ können Sie an einen Ort näher an den Wert hören möchten Sie:

referenceMainUrl.child("group_list/First Group/-KtBH9gnTszNxcXjNu9A"); 
+0

@ Doug Stevenson Vielen Dank für die Antwort, aber ich habe Abfrage, die jedes Mal, wenn neue Gruppe erstellt wird, dann wird dieser Wert '-KtBH9gnTszNxcXjNu9A' unterschiedlich sein, so wie ich es verwalte. Ich habe keine Ahnung, wie man nur 'Benutzer' von allen Gruppenlisten bekommt. –

0

Dieser Code läuft in einer Schleife und gibt Ihnen Werte für alle ‚des Benutzers

DatabaseReference dRef = FirebaseDatabase.getInstance().getReference().child("group_list").child("First_Group"); 
    dRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for(DataSnapshot snapshot : dataSnapshot.getChildren()){ 
       String userName = snapshot.child("user").getValue(String.class); 
      } 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
Verwandte Themen