我正在构建一个集成 firebase 的 Android 应用程序,我想要一个功能,用户可以使用他们的姓名/用户名搜索其他用户。我目前正在使用 SearchView 小部件(想使用 onQueryTextChange()) 例如,如果用户输入代码,则所有匹配“代码”(或以“代码”开头,其中任何一个)的查询都会显示
Firebase 结构:
users
<uid of user1>
name: ....
username: .......
<uid of user2>
name: ....
username: .......
...
...
帮助我提供省时的解决方案(用java),这样搜索就很快
在您拥有的结构中,如果您只想检索具有值为
users
属性且值为 username
的 "code"
的子节点,您可以使用查询来对 order 和 filter 节点进行排序。像这样的东西:
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~");