Android firebase-从列表中获取单个对象作为快照

Android firebase-从列表中获取单个对象作为快照,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,所以我有一个存储在firebase中的对象列表,希望使用child equal to方法查询一个对象,但我得到的是一个具有单个键值的映射 下面的代码显示了我想要实现的目标,而不是处理hashmaps final FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference coutryRef = database.getReference(FireContract.PATH_COUNTR

所以我有一个存储在firebase中的对象列表,希望使用child equal to方法查询一个对象,但我得到的是一个具有单个键值的映射

下面的代码显示了我想要实现的目标,而不是处理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());

        }
    });

当您启动查询时,您将始终得到一个结果列表。即使只有一个项目与查询匹配,结果也将是一个项目列表

要处理列表,您可以使用
childevenlister
,也可以在
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());
    }
});

根据stackoverflow的说法,添加这样的评论可能是不合适的,但我无法停止我自己。你不知道看到你回复我的帖子我有多兴奋,我过去经常看你关于firebase的演讲,真的很喜欢…:DOh。你能不能也考虑一下,这将是一个很大的帮助。