android - 如何使用两个子值在 Firebase 中进行搜索?

标签 android database firebase android-studio firebase-realtime-database

我想从 Firebase 实时数据库中获取搜索结果与子值匹配的所有节点。例如,考虑我的以下 Firebase 结构:

    -Users
        -uid
            -uname:abc
            -usurname:xyz
        -uid
            -uname:abc
            -usurname:pqr
        -uid
            -uname:hij
            -usurname:xyz

我的搜索键是abc xyz。我想从 -uname 和 -usurname 获取结果,以向用户显示 Firebase 的匹配结果。

我的代码:

Query query = FirebaseDatabase.getInstance().getReference("Users").orderByChild("uname").startAt(getInput).orderByChild("usurname").startAt(getInput);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Log.e("app","found: "+snapshot.getValue());
            }
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

错误:

    java.lang.IllegalArgumentException: You can't combine multiple orderBy calls!
            at com.google.firebase.database.Query.validateNoOrderByCall(Query.java:134)
            at com.google.firebase.database.Query.orderByChild(Query.java:609)

如何在 Java 代码中编写查询?

最佳答案

你可以这样做。我假设您已将搜索键拆分为两个字符串,即 searchKey1 和 searchKey2,如下所示。

    String searchKey="abc xyz";
    String[] str=searchKey.split(" ");
    String searchKey1=str[0];
    String searchKey2=str[1];

    // OR YOU CAN SPLIT HOWEVER YOU WANT //
    

databaseReference.child("users").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                if(dataSnapshot1.child("uname").exists()&&dataSnapshot1.child("usurname").exists()) {
                    if(dataSnapshot1.child("uname").getValue().toString().equals(searchKey1)&&dataSnapshot1.child("usurname").getValue().toString().equals(searchKey2)) {
                        //Do What You Want To Do.
                    }
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

关于android - 如何使用两个子值在 Firebase 中进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62726987/

相关文章:

java - HTTP URL 连接错误

java - onActivityResult() 未使用两个 fragment 调用

mongodb - 什么是多态数据? NoSQL 数据库

mysql - 在数据库中实现版本系统

javascript - 如何从 firebase 数据库中提取部分数据

android - 我想在用户卸载并重新安装应用程序后向他们提供反馈?

android - 无法实例化坐标资源系统java.lang.NoClassDefFoundError:org.geotools.factory.Hints

mysql - 在 select 中使用 Case 语句

javascript - Firebase (Google) 云函数 - 去抖动/节流 database.onWrite() #AskFirebase

javascript - 使用 Vue.js 的 Firebase 电话号码身份验证不起作用