Android 我想使用常规搜索方法在firebase数据库中筛选/查找用户。但我不知道

Android 我想使用常规搜索方法在firebase数据库中筛选/查找用户。但我不知道,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,请我想使用android上的搜索和检索数据一样,每一个正常的搜索工作。。。在键入字母时进行筛选。我的数据在Firebase数据库中。“root-users-UniqueID-(名称、类别、年龄、能力)。我只想根据该能力查找(筛选)。我对firebase还是新手。请帮助我。firebase不会让您像常规SQL类型数据库那样搜索通配符 使用firebase最多只能在单词的开头进行匹配 搜索名称“sketchthat”的示例 这将为您带来所有以s开头的名称 您可以对其进行优化(Javascript中的

请我想使用android上的搜索和检索数据一样,每一个正常的搜索工作。。。在键入字母时进行筛选。我的数据在Firebase数据库中。“root-users-UniqueID-(名称、类别、年龄、能力)。我只想根据该能力查找(筛选)。我对firebase还是新手。请帮助我。

firebase不会让您像常规SQL类型数据库那样搜索通配符

使用firebase最多只能在单词的开头进行匹配

搜索名称“sketchthat”的示例

这将为您带来所有以
s
开头的名称

您可以对其进行优化(Javascript中的示例)

此解决方案的问题是firebase区分大小写。因此,您需要名称的大写或小写版本,然后确保所有搜索都转换为该大小写。

尝试此方法

editext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String str = charSequence.toString();

            final FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference ref = database.getReference().child("root").child("users");

            ref.orderByChild("name")
                    .startAt(str)
                    .endAt(str+"\uf8ff")
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for(DataSnapshot child: dataSnapshot.getChildren()){
                               //get data
                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });
var searchPhrase = 'sketch';
var searchEnd = searchPhrase.charCodeAt(searchPhrase.length - 1); // Gets the ASCII value.
var endAtPhrase = searchPhrase.substr(0, searchPhrase.length - 1) + String.fromCharCode(searchEnd + 1); // Next character in the list "sketci"

firebase
  .database()
  .ref('/users/')
  .orderByChild('name')
  .startAt(searchPhrase)
  .endAt(endAtPhrase)
editext.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String str = charSequence.toString();

            final FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference ref = database.getReference().child("root").child("users");

            ref.orderByChild("name")
                    .startAt(str)
                    .endAt(str+"\uf8ff")
                    .addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for(DataSnapshot child: dataSnapshot.getChildren()){
                               //get data
                            }

                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    });