如何根据用户名搜索用户?我已经看过很多关于此事的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
2 回答
你差不多完成了,但是你应该在已经应用
orderBy()
,startAt()
,_ 1876300之类的数据库引用之后添加addListenerForSingleValueEvent
.根据documentation,您对
orderBy()
,startAt()
和endAt()
的使用是正确的 .但是
addListener
方法必须直接应用于orderByChild()
,startAt()
和endAt()
方法链返回的对象,而不是应用... .getReference("users")
检索到的DatabaseReference
上的新语句 .如果您使用ChildEventListener: