【发布时间】:2019-01-12 00:01:07
【问题描述】:
我对 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”时,它将显示所有数据库结果——搜索不适用于这两个字母。此外,如果我输入第一个字母与数据库条目匹配的搜索字符串,它将显示此数据库项,即使字符串的其余部分不匹配。
如果有人能帮助我理解为什么这个搜索查询不能正常工作,我将不胜感激。
【问题讨论】:
-
"另外,如果我输入第一个字母与数据库条目匹配的搜索字符串,它将显示此数据库项目,即使字符串的其余部分不匹配。"这种行为似乎与您实现的代码完全一致。您正在过滤以输入的搜索字符串开头的任何项目。如果您想要不同的行为,则需要执行不同的查询。例如,您不是在寻找
eventRef.orderByChild("name").equalTo(name)。 -
您好弗兰克,感谢您的回答。我的问题是,如果我的搜索字符串是“cu”,它仍然会显示以“co”或“ca”等开头的数据库结果,即使这在技术上与搜索字符串不匹配。你知道有没有办法解决这个问题?
-
如果即使有了我的回答您仍然遇到问题,请将您的问题更新为:1) 为
name使用硬编码值 2) 包含来自eventRef的 JSON(作为文本,没有截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。
标签: java android firebase firebase-realtime-database