2016-10-25 2 views
0

Also habe ich eine Liste von Objekten in Firebase gespeichert und wollen nur für ein Objekt mit Kind gleich Methode abfragen, aber ich bekomme stattdessen eine Karte mit einzelnen Schlüsselwert.Firebase - Holen Sie sich ein Objekt aus der Liste als Snapshot

Code unten zeigt, was ich erreichen möchte, anstatt mit hashmaps zu handeln.

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    DatabaseReference coutryRef = database.getReference(FireContract.PATH_COUNTRY); 

    Query countryQuery = coutryRef.orderByChild(FireContract.CHILD_NAME) 
      .equalTo(TestUtilities.TEST_COUNTRY_ALGERIA).limitToFirst(1); 

    countryQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      Country country = dataSnapshot.getValue(Country.class); 
      assertEquals(TestUtilities.TEST_COUNTRY_ALGERIA, country.getName()); 

      //get country key 
      String coutryKey = dataSnapshot.getKey(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      fail("Failed to get country: " + databaseError.getMessage()); 

     } 
    }); 

Antwort

1

Wenn Sie eine Abfrage auslösen, erhalten Sie immer eine Ergebnisliste. Selbst wenn nur ein einzelnes Element mit der Abfrage übereinstimmt, wird als Ergebnis eine Liste mit einem Element angezeigt.

Um die Liste zu handhaben, können Sie entweder ein ChildEvenListener oder Sie können eine Schleife über die Kinder in Ihrer ValueEventListener verwenden können:

countryQuery.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot countrySnapshot: dataSnapshot.getChildren()) { 

      Country country = countrySnapshot.getValue(Country.class); 
      assertEquals(TestUtilities.TEST_COUNTRY_ALGERIA, country.getName()); 

      //get country key 
      String countryKey = countrySnapshot.getKey(); 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     fail("Failed to get country: " + databaseError.getMessage()); 
    } 
}); 
+0

Hinzufügen solcher Kommentar kann unangemessen gemäß Stackoverflow, aber ich kann einfach nicht aufhören ich selbst –

+0

Sie haben keine Ahnung, wie sehr ich aufgeregt bin, um Sie zu sehen, meine Posts antwortend, ich pflegte, Ihre Gespräche über Firebase zu sehen und wirklich genossen sie ...: D –

+0

Oh. Kannst du dir das auch anschauen, es wird ein großer Gefallen sein. –

Verwandte Themen