【问题标题】:Multiple equal to in Firebase DatabaseFirebase 数据库中的倍数等于
【发布时间】:2021-02-02 13:29:37
【问题描述】:

我正在开发一个血库应用程序,为了让它工作,当用户请求特定类型的血液时,应该显示具有兼容血型的人。 例如:如果请求者的血型为 AB-,则血型为:O-、A-、B-、AB- 的人应显示在 Firebase Recycler View 中。但是,我读到您不能在一个查询中拥有多个 equalTo()。

Query query = findDonorsRef.orderByChild("bloodGroup");
case "AB-":
            option = new FirebaseRecyclerOptions.Builder<FindDonors>()
                    .setQuery(query.equalTo("O-").equalTo("A-").equalTo("B-").equalTo("AB-"), FindDonors.class)
                    .build();
            break;

这导致应用程序崩溃,任何人都可以提出任何建议。

【问题讨论】:

    标签: java android firebase-realtime-database android-recyclerview


    【解决方案1】:

    我要做的是在我的数据库中为每个用户设置一个 campatibleWith 属性。因此,与其比较每个兼容的血型来寻找匹配,只需比较用户是否与所需的血型兼容。

    通过将您需要的血型传递给它,使您的查询更加动态。

    String neededBloodGroup = "AB-";
    Query query = findDonorsRef.orderByChild("compatibleWith/".concat(neededBloodGroup)).equalTo(true);
    

    然后,无需手动检查每个兼容性,只需查询数据库即可,因为上面已经完成了所有过滤。

    option = new FirebaseRecyclerOptions.Builder<FindDonors>()
        .setQuery(query, FindDonors.class)
        .build();
    

    这会找到捐助者的结果,例如:

    {
        "-KdWh_9KVF16efcSdrji": {
            // Example data
            "name": "Daniel Guzmán",
            "age": 24,
            "gender": "male",
            // Here's the trick
            "bloodGroup": "A-",
            "compatibleWith":{
                "AB-": true
                // All the compatible groups here
            }
        }
    }
    

    【讨论】:

    • 丹尼尔的好答案!
    • 非常感谢!无论如何,我不得不更改注册代码,这非常有效!我希望有一天我能像你一样拥有批判性思维。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多