首页 > 解决方案 > Android:Firebase 搜索查询无法正常工作

问题描述

我对 Android 应用程序开发相当陌生。我创建了一个简单的搜索查询,按名称搜索我的 firebase 数据库(请参见下面的代码):

private void firebaseEventSearch(String name) {
    //query to search database based on text in textbox - made case insensitive
    Query eventSearchQuery = eventRef.orderByChild("name").startAt(name.toUpperCase()).endAt(name.toLowerCase() + "\uf8ff");
    eventSearchQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                Event event = eventSnapshot.getValue(Event.class);
                events.add(event);
            }
            adapter.notifyDataSetChanged();
        }

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

        }
    });
}

它在大多数情况下都可以正常工作,但是,当我输入字母“A”或“B”时,它将显示所有数据库结果——搜索不适用于这两个字母。此外,如果我输入第一个字母与数据库条目匹配的搜索字符串,即使字符串的其余部分不匹配,它也会显示此数据库项目。

如果有人能帮助我理解为什么这个搜索查询不能正常工作,我将不胜感激。

标签: javaandroidfirebasefirebase-realtime-database

解决方案


Firebase 中的查询对大写字母非常敏感。试试这个。

private void firebaseEventSearch(String name) {
    //query to search database based on text in textbox - made case insensitive
    //Add this part
    String firstLetterCapital = query.substring(0, 1).toUpperCase() + query.substring(1);
    Query eventSearchQuery = eventRef.orderByChild("name").startAt(firstLetterCapital).endAt(firstLetterCapital + "\uf8ff");
    eventSearchQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot eventSnapshot : dataSnapshot.getChildren()) {
                Event event = eventSnapshot.getValue(Event.class);
                events.add(event);
            }
            adapter.notifyDataSetChanged();
        }

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

        }
    });
}

推荐阅读