【发布时间】:2017-07-17 07:35:13
【问题描述】:
如何根据用户名搜索用户?我已经查看了很多关于这个问题的 SO 帖子,但仍然无法实现我想要做的事情。我尝试应用我在这些帖子中看到的内容,如下所示:
DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference("users");
usersRef.orderByChild("username")
.startAt(queryText)
.endAt(queryText+"\uf8ff");
usersRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
searchList = new ArrayList<>();
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
User user = postSnapshot.getValue(User.class);
Log.d("USER: ", "" + user.getUsername());
searchList.add(user);
}
adapter = new UserCardAdapter(getContext(), searchList);
recyclerView.setAdapter(adapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("onQueryTextChange: " ,databaseError.getMessage());
}
});
但是,仍会检索所有用户。我已经看到 startAt() 和 endAt() 的用法据说适用于其他帖子的其他人,但我无法让它为我工作..
这是用户数据的存储方式: User Data Structure
【问题讨论】:
-
你在用什么
queryText?如果你使用.equalTo("fakeuser3")而不是startAt()和endAt()会发生什么? -
queryText 是从“搜索栏”输入的文本。尝试 .equalsTo() 再次返回所有用户 :( 我开始怀疑我是否使用了正确的监听器..
-
宾果游戏!看我的回答。
标签: android firebase firebase-realtime-database