加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:28:30 所属栏目:Java 来源:网络整理
导读:我是 Android应用程序开发的新手.我创建了一个简单的搜索查询,按名称搜索我的firebase数据库(参见下面的代码): private void firebaseEventSearch(String name) { //query to search database based on text in textbox - made case insensitive Query even
我是 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数据库查询区分大小写.因此,当您调用orderByChild(“name”)时,所有节点都按其name属性排序.如果你看一个ASCII图表,你会发现这将导致这个小写和大写字符的顺序:

A B C .... X Y Z a b c ... x y z

现在,您的查询将获取此数据的一部分.如果您正在搜索A,则切片为:

A B C .... X Y Z a

所以这比你想要的更多.

如果你想在Firebase上允许大小写无关紧要的搜索,最常见的(但不是完全失败的)实现它的方法是添加一个额外的属性,以一种无关紧要的方式存储名称.例如. “name_uppercase”:“ZUHRAIN”.有了这个,你可以搜索:

eventRef.orderByChild("name_uppercase").startAt(name.toUpperCase()).endAt(name.toUpperCase() + "uf8ff");

另见:

> Making a firebase query search NOT case sensitive
> firebase query methods startAt() taking case sensitive parameters
> Cloud Firestore Case Insensitive Sorting Using Query(对于Cloud Firestore,但它显示了一种更加安全的方式来执行此操作)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读