首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Firebase数据库Android上获取具有相似子节点的所有父节点?

如何在Firebase数据库Android上获取具有相似子节点的所有父节点?
EN

Stack Overflow用户
提问于 2019-05-10 09:10:15
回答 1查看 561关注 0票数 0

我的数据库屏幕截图

我希望通过返回具有某些相似子节点的所有父节点的名称来查询我的数据库。

我已经获取了一个父级的名称,但是我想要获取所有具有相似子值的父级的名称。

假设,我希望获得具有类似的子节点值为2000的Hotels的名称,并将其评级为3-star

代码语言:javascript
复制
final List<String> hotelNames = new ArrayList<String>();
final Query userQuery = FirebaseDatabase.getInstance().getReference().child("F-5").orderByChild("HotelTypeTwo");

userQuery.equalTo(varX).addListenerForSingleValueEvent(
        new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot foodSnapshot: dataSnapshot.getChildren()) {


                    hotelNames.add(foodSnapshot.getKey());


                    for (int i=0;i < hotelNames.size();i++)
                    {
                        Log.i("Value of element "+i,hotelNames.get(i));

                    }

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        }
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-10 09:44:22

因此,要获得HotelTypeTwo等于Desi的所有酒店,并根据结果截图:Islamabad HotelIslamabad Mariott Hotel,请使用以下代码行:

代码语言:javascript
复制
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference fRef = rootRef.child("F-5");
Query query = fRef.orderByChild("HotelTypeTwo").equalTo("Desi");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String hotelName = ds.getKey();
            Log.d(TAG, hotelName);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

您的logcat中的结果将是:

代码语言:javascript
复制
Islamabad Hotel
Islamabad Mariott Hotel

不幸的是,在Firebase中不允许查询多个属性。我可以从下面的帖子中找到解决办法:

但是,在Firestore中允许使用复合查询

citiesRef.whereEqualTo("state",“CO”).whereEqualTo(“名称”,“丹佛”);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56074307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档