java – 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”时,它将显示所有数据库结果 – 搜索不适用于这两个字母.此外,如果我键入第一个字母与数据库条目匹配的搜索字符串,它将显示此数据库项,即使该字符串的其余部分与其不匹配也是如此. 我真的很感激,如果有人能帮助我理解为什么这个搜索查询不能正常工作. 解决方法
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |