java - Android:Firebase 搜索查询无法正常工作

标签 java android firebase firebase-realtime-database

我是 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”时,它会显示所有数据库结果——搜索对这两个字母不起作用。此外,如果我输入首字母与数据库条目匹配的搜索字符串,它会显示该数据库项目,即使字符串的其余部分不匹配也是如此。

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

最佳答案

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) {

        }
    });
}

关于java - Android:Firebase 搜索查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155576/

相关文章:

java - 如何在 Cassandra Java Driver QueryBuilder 中传递 TTL?

java - "exception in thread main/by zero"错误

android - 为什么没有收到来自服务的本地广播?

java - Android 以编程方式设置/更改/删除锁定屏幕 PIN、密码或解锁图案

java - 如何将 mp3 文件发送到 firebase

Java静态对象/方法问题

java - 我可以在编译时从注释处理器中的 TypeVariable 或 VariableElement 获取底层类上的方法列表吗

android - 如何将 relativelayout.setBackgroundDrawable() 与位图一起使用?

ios - Firebase Google Sign In (iOS) - 从未调用过 GIDSignInUIDelegate 方法

firebase - Flutter firebase 集成出现错误 : Failed to turn object into JSON