2016-06-24 15 views
0

My Firebase-Datenbank wie folgt aussieht:Get Objekt von Kind Wert

{ 
    "users": { 
      "-KL2IIz4jasq1kjdM-LA": { 
       "id": "12345", 
       "name": "peter", 
       "email": "[email protected]" 
      } 
      "-KL2Idasdsf34kjdM-LA": { 
       "id": "45356", 
       "name": "joe", 
       "email": "[email protected]" 
      } 
    } 
} 

Jetzt brauche ich Joe zu erhalten, indem seine ID "45356". Wie kann ich das archivieren?

Ich kann ihn nur durch seinen $ userId bekommen "-KL2Idasdsf34kjdM-LA" im Moment

Antwort

2
mDatabase.child("users").orderByChild("id").equalTo("45356").addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) { 
       //data will be available on userSnapshot.getValue(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "error:", databaseError.toException()); 
     } 
}); 
3

Während @ adolfosrs Antwort funktioniert, empfehle ich Ihre Datenstruktur zu ändern. Wenn Ihre Benutzer eine natürliche ID haben, sollten Sie sie unter dieser ID speichern.

{ 
    "users": { 
     "12345": { 
      "name": "peter", 
      "email": "[email protected]" 
     } 
     "45356": { 
      "name": "joe", 
      "email": "[email protected]" 
     } 
    } 
} 

Dies ermöglicht ihnen, mit einem (feste Leistung) direkt Lookup Laden:

mDatabase.child("users").child("45356").addListenerForSingleValueEvent(
    new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      //data will be available on dataSnapshot.getValue(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.w(TAG, "error:", databaseError.toException()); 
     } 
}); 

Das wird eine feste Leistung haben, unabhängig davon, wie viele Benutzer Sie haben. Eine Abfrage wird langsamer, wenn die Anzahl der Benutzer steigt, was die Skalierbarkeit beeinträchtigt.