2016-10-25 2 views
0

Итак, у меня есть список объектов, хранящихся в firebase, и вы хотите запросить только один объект, используя дочерний метод, равный методу, но вместо этого я получаю карту с одним ключевым значением.firebase - получить один объект из списка как моментальный снимок

Код ниже показывает, чего я хочу достичь, вместо того, чтобы иметь дело с hashmaps.

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()); 

     } 
    }); 

ответ

1

Когда вы запускаете запрос, вы всегда получите список результатов. Даже когда есть только один элемент, соответствующий запросу, результатом будет список одного элемента.

Для обработки списка, вы можете либо использовать ChildEvenListener или вы можете петлю над детьми в вашем ValueEventListener:

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

Добавление такой комментарий может быть неприемлемым в соответствии с StackOverflow, но я просто не могу остановиться my self –

+0

Вы не представляете, насколько я рад, что вы отвечаете на мои сообщения, я часто смотрел ваши разговоры о firebase и действительно наслаждался ими ...: D –

+0

Oh. Можете ли вы заглянуть в это, это будет большая услуга. –

Смежные вопросы