提问人:Harsh Master 提问时间:11/11/2023 最后编辑:Frank van PuffelenHarsh Master 更新时间:11/11/2023 访问量:37
在 firebase 实时数据库中搜索用户名
Searching for username in firebase realtime database
问:
我正在构建一个集成 firebase 的 android 应用程序,我希望有一个功能,用户可以使用他们的姓名/用户名搜索其他用户。我目前正在使用 SearchView 小部件(想使用 onQueryTextChange()) 例如,如果用户键入代码,则会显示所有匹配“code”(或以“code”开头,其中任何一个)的查询
Firebase 结构:
users
<uid of user1>
name: ....
username: .......
<uid of user2>
name: ....
username: .......
...
...
帮助我提供省时的解决方案(在 java 中),以便搜索速度很快
答:
1赞
Frank van Puffelen
11/11/2023
#1
在您拥有的结构中,如果只想检索其属性值为 的子节点,则可以使用查询对节点进行排序和筛选。像这样的东西:users
username
"code"
Query query = dbRoot.child("users").orderByChild("username").equalTo("code");
若要执行查询,请执行以下操作:
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
Log.i("DB", userSnapshot.getKey());
Log.i("DB", userSnapshot.child("name").getValue(String.class));
...
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
如果要获取以 开头的所有子节点,则为:username
"code"
Query query = dbRoot.child("users")
.orderByChild("username")
.startAt("code")
.endAt("code~");
评论
0赞
Harsh Master
11/12/2023
.endAt(“code~”)的意义是什么;
1赞
Frank van Puffelen
11/12/2023
它只是 ASCII 字符范围中后期的一个字符,因此查询会捕获通常位于该范围内的所有节点。
评论