本文介绍了Firebase Android-startAt()和endAt()无法正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何根据用户名搜索用户?我已经看过很多关于此问题的SO帖子,但是仍然无法实现我想做的事情..我尝试应用在这些帖子中看到的内容,如下所示:

How do I search for users based on their usernames? I have looked at numerous SO posts on this matter but am still unable to achieve what I want to do.. I have tried to apply what I saw in those posts and is shown below:

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()的用法据说可以在其他帖子上为其他人使用,但是我无法设法使它对我有用.

However, all users are still retrieved. I have seen the usage of startAt() and endAt() supposedly work for others on other posts but I cannot manage to get it to work for me..

这是存储用户数据的方式:用户数据结构

This is how the user data is stored:User Data Structure

推荐答案

您几乎做对了,但是您应该在已经应用orderBy()startAt()endAt()的数据库引用之后添加addListenerForSingleValueEvent. /p>

You almost done right but you should add addListenerForSingleValueEvent after the database reference that already apply orderBy() , startAt(), endAt() like this.

 usersRef.orderByChild("username")
                        .startAt(queryText)
                        .endAt(queryText+"\uf8ff")
                        .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());
                }
            });

这篇关于Firebase Android-startAt()和endAt()无法正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 14:58