我是 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/