Java 按用户名搜索FirebaseDatabase中的用户

Java 按用户名搜索FirebaseDatabase中的用户,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图用一个简单的搜索栏(EditText)按用户名搜索存储在firebase数据库中的用户,并单击按钮显示该特定用户 我的findfriends.java文件中有以下代码 public class FindFriendsActivity extends AppCompatActivity { private EditText seachTextBox; private ImageView searchImage; private RecyclerView search

我试图用一个简单的搜索栏(EditText)按用户名搜索存储在firebase数据库中的用户,并单击按钮显示该特定用户

我的findfriends.java文件中有以下代码

public class FindFriendsActivity extends AppCompatActivity {

    private EditText seachTextBox;
    private ImageView searchImage;
    private RecyclerView searchResultList;
    private DatabaseReference allUsersDatabase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_find_friends);

        searchResultList = findViewById(R.id.search_result_list);
        searchResultList.setHasFixedSize(true);
        searchResultList.setLayoutManager(new LinearLayoutManager(this));

        allUsersDatabase = FirebaseDatabase.getInstance().getReference().child("users");

        seachTextBox = findViewById(R.id.searchBox);
        searchImage = findViewById(R.id.searchImage);

        searchImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String seachbox = seachTextBox.getText().toString();

               final Query searchpeople = allUsersDatabase.orderByChild("username").startAt(seachbox)
                        .endAt(seachbox + "\uf8ff");
            }
        });

    }

    @Override
    protected void onStart()
    {
        super.onStart();

        FirebaseRecyclerOptions<FindFriends> options =
                new FirebaseRecyclerOptions.Builder<FindFriends>()
                .setQuery(allUsersDatabase, FindFriends.class)
                .build();

        FirebaseRecyclerAdapter<FindFriends, FindFriendsHolder> adapter =
                new FirebaseRecyclerAdapter<FindFriends, FindFriendsHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull FindFriendsHolder holder, int position, @NonNull FindFriends model)
                    {
                        holder.username.setText(model.getUsername());
                        holder.fullname.setText(model.getFullname());
                        Picasso.get().load(model.getProfileimage()).placeholder(R.drawable.friends_result_icon).fit().into(holder.userimage);
                    }

                    @NonNull
                    @Override
                    public FindFriendsHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
                    {
                        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.search_friends_result_layout,viewGroup,false);
                        FindFriendsHolder viewHolder = new FindFriendsHolder(view);
                        return viewHolder;
                    }
                };

        searchResultList.setAdapter(adapter);
        adapter.startListening();
    }


    public static class FindFriendsHolder extends RecyclerView.ViewHolder
    {

        TextView username, fullname;
        ImageView userimage;

        public FindFriendsHolder(@NonNull View itemView)
        {
            super(itemView);

            username = itemView.findViewById(R.id.username_result);
            fullname = itemView.findViewById(R.id.fullname_result);
            userimage = itemView.findViewById(R.id.friend_result_image);
        }

    }

}///end
公共类FindFriendsActivity扩展了AppCompatActivity{
私有编辑文本seachTextBox;
私有图像查看搜索图像;
私人RecyclerView searchResultList;
私有数据库参考allUsersDatabase;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u find\u friends);
searchResultList=findViewById(R.id.search\u result\u list);
searchResultList.setHasFixedSize(true);
searchResultList.setLayoutManager(新的LinearLayoutManager(this));
allUsersDatabase=FirebaseDatabase.getInstance().getReference().child(“用户”);
seachTextBox=findviewbyd(R.id.searchBox);
searchImage=findviewbyd(R.id.searchImage);
searchImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
字符串seachbox=seachTextBox.getText().toString();
最终查询searchpeople=allUsersDatabase.orderByChild(“用户名”).startAt(seachbox)
.endAt(seachbox+“\uf8ff”);
}
});
}
@凌驾
受保护的void onStart()
{
super.onStart();
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(allUsersDatabase,FindFriends.class)
.build();
FirebaseRecyclerAdapter适配器=
新FirebaseRecyclerAdapter(选件){
@凌驾
受保护的无效onBindViewHolder(@NonNull FindFriendsHolder,int位置,@NonNull FindFriends模型)
{
holder.username.setText(model.getUsername());
holder.fullname.setText(model.getFullname());
Picasso.get().load(model.getProfileimage()).placeholder(R.drawable.friends\u result\u icon.fit().into(holder.userimage);
}
@非空
@凌驾
public FindFriendHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i)
{
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.search\u friends\u result\u layout,viewGroup,false);
FindFriendsHolder viewHolder=新的FindFriendsHolder(视图);
返回视图持有者;
}
};
searchResultList.setAdapter(适配器);
adapter.startListening();
}
公共静态类FindFriendsHolder扩展了RecyclerView.ViewHolder
{
TextView用户名,全名;
ImageView用户图像;
公共FindFriendHolder(@NonNull View itemView)
{
超级(项目视图);
username=itemView.findviewbyd(R.id.username\u结果);
fullname=itemView.findviewbyd(R.id.fullname\u结果);
userimage=itemView.findviewbyd(R.id.friend\u result\u image);
}
}
}///结束
我做了一些研究,发现我需要创建一个查询,并将其设置为Startat(Edittext).endAt(Edittext),但我不确定在哪里实际插入查询

通过以下代码,我能够显示数据库中的每个用户


任何帮助都会很好

如果您想让它更简单,您可以使用Firestore而不是Realtime DB。但是,如果仍要使用RealtimeDB,可以创建条件循环,如:

if(edtUsername.text.toString == username){
   // Your code
}

根据您的评论,您现在获得了所有用户。如果您只想获得一个用户,请更改以下代码行:

Query searchpeople = allUsersDatabase.orderByChild("username").startAt(seachbox)
                    .endAt(seachbox + "\uf8ff");


使用此代码时会发生什么情况?void onStart会收集并显示所有用户。我有一个文本框,通过searchYes手动查找用户。问题是我从未调用过searchpeople查询,我不知道在哪里调用它。不,它不起作用,就像我前面提到的那样。在我的代码中,我没有调用searchpeople查询在这种情况下,为什么不调用searchpeople查询?这就是你想要的吗?是的,我解决了我的问题。当.setQuery时,我调用allusersDatabase来传递searchpeople查询。代码工作完美,将标记为正确答案。
Query searchpeople = allUsersDatabase.orderByChild("username").equalTo(seachbox);