java - 按用户名在 FirebaseDatabase 中搜索用户

标签 java android firebase firebase-realtime-database

我正在尝试使用简单的搜索栏 (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

我做了一些研究,发现我需要创建一个查询并将其设置为 Startat(Edittext).endAt(EditText) 但我不确定实际插入查询的位置。

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

任何帮助都会很棒!

最佳答案

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

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

Query searchpeople = allUsersDatabase.orderByChild("username").equalTo(seachbox);

关于java - 按用户名在 FirebaseDatabase 中搜索用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55055319/

相关文章:

java - 在java中交换字符串中的几个字符?

Activity.showDialog(int,Bundle)上的java.lang.NoSuchMethodError?

java - 当用户单击生成按钮时生成 N 个随机 4 位整数字符串和 7 字符字符串,当用户单击显示按钮时显示所有使用共享首选项

javascript - 错误 : No Firebase App '[DEFAULT]' has been created - call Firebase App. 初始化应用程序()

firebase - 如何使用Firebase Emulator设置Firebase Firestore和云功能测试套件以进行JS开发

ios - 从 Firebase 打印所有子列 - iOS Swift 4

Jruby 中的 Java 数组

java - 使用 readObject() 反序列化一个类,并将 "subsititute"调用它的实例与 readObject 返回的实例一起使用

android - 我真的需要将 Context 实例深入到应用程序中吗?

java - 应用程序菜单加速器和 OpenFileHandler 在 Swing 应用程序中不起作用