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

标签 java android firebase firebase-realtime-database

我的数据库的屏幕截图

enter image description here

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

我已经在获取一个父级与其子级的名称,但我想获取具有相似子级值的所有父级的名称。

假设,我想获取具有相似子节点值 2000 且评级为 3 星级 的酒店名称。

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) {

            }
        }
);

最佳答案

因此,要获取 HotelTypeTwo 等于 Desi 的所有酒店,并根据您的屏幕截图获取结果:Islamabad Hotel伊斯兰堡万豪酒店,请使用以下代码行:

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 中的结果将是:

Islamabad Hotel
Islamabad Mariott Hotel

遗憾的是,Firebase 中不允许查询多个属性。我在以下帖子中的回答可以是解决方法:

但是,在 Firestore compound queries允许:

citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver");

关于java - 如何在Firebase数据库Android上获取具有相似子节点的所有父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56074307/

相关文章:

java - android studio 局部变量冗余

java - 通过事件处理插入图像?

IOS - 未从 firebase 控制台收到 FCM 推送通知

Android JSON : java. lang.RuntimeException:无法启动 Activity ComponentInfo

android - 为什么使用 float 而不是 double 不会提高 Android 性能?

Android:Android 应用程序可以有多个 FirebaseMessagingServices

ios - “证书 bundleId 与您应用的证书不匹配”Firebase 云消息传递

java - 如何使用 Apache Camel/Spring-boot 订阅持久主题?

java - java依赖分析工具

javascript - 触摸隐藏菜单适用于平板电脑,不适用于任何 iOS 设备