如何在安卓 Firebase 中应用多个查询?

4
这是我的Firebase数据库结构:

This is My Firebase database structure this my firbase database structure

我想要获取类别为 "cat" 且级别为 "1" 的数据。
以下是我的代码:
 Query query = firebaseReference.orderByChild("category").equalTo("cat1").limitToFirst(20);

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                UTILS.Log.e(TAG, "List Of User Count " + dataSnapshot.getChildrenCount());

                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                    //FCreateUSer modelRegister = dataSnapshot1.getValue(FCreateUSer.class);
                    UTILS.Log.e(TAG, "User Email :" + dataSnapshot1.child("question").getValue());

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }

        });

这段代码可以工作,但是如何在firebase中使用两个条件呢?我尝试了两次orderByChild,但是出现了错误java.lang.IllegalArgumentException: You can't combine multiple orderBy calls!


Firebase数据库查询只能使用单个orderBy调用。您可以将这些值合并到单个属性中以实现您的用例。请参见https://dev59.com/Yl8d5IYBdhLWcg3wiit9。 - Frank van Puffelen
1个回答

1
请看这个视频(它是用JavaScript编写的,但它完全解决了你的问题):https://youtu.be/sKFLI5FOOHs?t=612 基本上,您需要为查询结构化数据。在 OP 的示例中,问题将具有像 category_level: "cat_1" 这样的字段。然后,您可以执行查询 equalTo("cat_1")。如果您需要它进行其他查询(但在这种情况下您需要处理重复项),则可以省略 categorylevel 字段。
如果您知道项目数量很少,最简单的解决方案就是拉取所有 category=cat 并过滤 level=1 项。

谢谢,我会查看视频。 - Vanraj Ghed
不行,我无法进行筛选,因为在该类别中有超过2000个记录,所以无法筛选等级=1。 - Vanraj Ghed
好的,我已经添加了。 - JoKr
1
从这个视频中,我已经按照你所说的做了,并且它起作用了。感谢你的帮助,我会投票并接受你的答案。 - Vanraj Ghed
@AndroidGeeks,你是怎么实现的?能分享一下代码吗? - Aditya Vyas-Lakhan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接