Android 我想使用常规搜索方法在firebase数据库中筛选/查找用户。但我不知道
请我想使用android上的搜索和检索数据一样,每一个正常的搜索工作。。。在键入字母时进行筛选。我的数据在Firebase数据库中。“root-users-UniqueID-(名称、类别、年龄、能力)。我只想根据该能力查找(筛选)。我对firebase还是新手。请帮助我。firebase不会让您像常规SQL类型数据库那样搜索通配符 使用firebase最多只能在单词的开头进行匹配 搜索名称“sketchthat”的示例 这将为您带来所有以Android 我想使用常规搜索方法在firebase数据库中筛选/查找用户。但我不知道,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,请我想使用android上的搜索和检索数据一样,每一个正常的搜索工作。。。在键入字母时进行筛选。我的数据在Firebase数据库中。“root-users-UniqueID-(名称、类别、年龄、能力)。我只想根据该能力查找(筛选)。我对firebase还是新手。请帮助我。firebase不会让您像常规SQL类型数据库那样搜索通配符 使用firebase最多只能在单词的开头进行匹配 搜索名称“sketchthat”的示例 这将为您带来所有以s开头的名称 您可以对其进行优化(Javascript中的
s
开头的名称
您可以对其进行优化(Javascript中的示例)
此解决方案的问题是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) {
}
});
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)
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) {
}
});