firebase - 从列表中获取单个对象作为快照 [英] firebase - get single object from list as snapshot

查看:135
本文介绍了firebase - 从列表中获取单个对象作为快照的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我有一个存储在firebase中的对象的列表,并希望查询只有一个对象使用孩子等于方法,但我得到一个唯一键值的地图。




$ b

 最后的FirebaseDatabase数据库= FirebaseDatabase.getInstance() ; 
DatabaseReference coutryRef = database.getReference(FireContract.PATH_COUNTRY);

查询countryQuery = coutryRef.orderByChild(FireContract.CHILD_NAME)
.equalTo(TestUtilities.TEST_COUNTRY_ALGERIA).limitToFirst(1);
$ b countryQuery.addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){

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

//获取国家/地区代码
字符串coutryKey = dataSnapshot.getKey();

$ b $覆盖$ b $ public void onCancelled(DatabaseError databaseError){
fail(Failed to get country:+ databaseError.getMessage());

}
});


解决方案

当您启动查询时,结果列表。即使只有一个项目与查询匹配,结果也会是一个项目的列表。



要处理列表,您可以使用 ChildEvenListener ,或者你可以循环 ValueEventListener 中的子元素:

<$ p (DataSnapshot countrySnapshot:dataSnapshot.getChildren())返回值为
的数据类型为
的公共无效onDataChange(DataSnapshot dataSnapshot){
的数据快照countrySnapshot:dataSnapshot.getChildren() ){

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

// get国家密钥
字符串countryKey = countrySnapshot.getKey();
}
}
$ b $ @覆盖
public void onCancelled(DatabaseError databaseError){
失败(无法获得国家:+ databaseError.getMessage());
}
});


So I have a list of objects stored in firebase and want to query for just one object using child equal to method but I am getting a map with single key value instead.

Code below showing what I want to achieve instead of dealing with 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());

        }
    });

解决方案

When you fire a query, you will always get a list of results. Even when there is only a single item matching the query, the result will be a list of one item.

To handle the list, you can either use a ChildEvenListener or you can loop over the children in your 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());
    }
});

这篇关于firebase - 从列表中获取单个对象作为快照的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆