我想使用常规搜索方法来过滤/查找我的 Firebase 数据库中的用户.但我毫无头绪



请我想在 android 上使用搜索并像每个正常搜索一样检索数据......在键入字母时进行筛选。我在Firebase数据库中有我的数据。"根 - 用户 - 唯一ID - (姓名、类、年龄、能力(。我只想根据能力找到(过滤(。我在火力基地仍然新鲜。帮帮我

Firebase不会像常规SQL类型数据库那样允许您搜索通配符。

你能用火碱做的最好的事情就是在单词的开头做一个匹配。

搜索名称"sketchthat"的示例。

firebase
.database()
.ref('/users/')
.orderByChild('name')
.startAt('s')
.endAt('t')

这将为您带来所有以s开头的名称。

你可以改进它(Javascript中的例子(

var searchPhrase = 'sketch';
var searchEnd = searchPhrase.charCodeAt(searchPhrase.length - 1); // Gets the ASCII value.
var endAtPhrase = searchPhrase.substr(0, searchPhrase.length - 1) + String.fromCharCode(searchEnd + 1); // Next character in the list "sketci"
firebase
.database()
.ref('/users/')
.orderByChild('name')
.startAt(searchPhrase)
.endAt(endAtPhrase)

此解决方案的问题是 Firebase 区分大小写。因此,您需要使用大写或小写版本的名称,然后确保所有搜索都转换为该大小写。

试试这个。

editext.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String str = charSequence.toString();
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference().child("root").child("users");
ref.orderByChild("name")
.startAt(str)
.endAt(str+"uf8ff")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot child: dataSnapshot.getChildren()){
//get data
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void afterTextChanged(Editable editable) {
}
});

最新更新