如何使用Firebase Firestore进行用户名搜索?

问题描述 投票:1回答:1

我目前正在尝试通过Firestore查询实现搜索方法,以便用户可以通过在EditText中键入其用户名来搜索其他用户,该用户名应在RecyclerView中显示结果。我尝试了其他一些代码变体,但似乎查询从未触发,并且我不知道问题出在哪里。非常感谢您的帮助!

这是我在搜索字段中的活动:

public class PlayerSearch extends AppCompatActivity {

    private EditText searchField;
    private View okBtn;

    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private CollectionReference userRef = db.collection("User");

    private UserAdapter userAdapter;

    // TODO: 2019-11-11 Make a method that takes the input of the EditText and make a query in Firestore to search a player and display the result

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

        searchField = findViewById(R.id.edit_text_search);
        okBtn = findViewById(R.id.search_player_ok);

        RecyclerView recyclerView = findViewById(R.id.recycler_view_search_player);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        String searchText = searchField.getText().toString();

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

                search(searchText);

            }
        });
    }

    private void search(String searchText) {
        Query query = userRef.orderBy("username").startAt(searchText).endAt(searchText + "\uf8ff");

        FirestoreRecyclerOptions<Users> options = new FirestoreRecyclerOptions.Builder<Users>()
                .setQuery(query, Users.class)
                .build();

        userAdapter = new UserAdapter(options);

    }

这是我的UserAdapter:

public class UserAdapter extends FirestoreRecyclerAdapter<Users, UserAdapter.UserHolder> {

    public UserAdapter(@NonNull FirestoreRecyclerOptions<Users> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull UserHolder holder, int position, @NonNull Users model) {

        holder.textViewUsername.setText(model.getUsername());

    }

    @NonNull
    @Override
    public UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_result,parent, false);
        return new UserHolder(view);
    }

    class UserHolder extends RecyclerView.ViewHolder {

        TextView textViewUsername;

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

            textViewUsername = itemView.findViewById(R.id.player_name_search);
        }
    }
}

这是我的User类:


public class Users {

    public Users (){

    }

    public String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Users(String username) {
        this.username = username;
    }
    }
android firebase google-cloud-firestore
1个回答
0
投票

您的search方法将创建一个新的适配器,但不会以任何方式将其与recyclerView关联。

所以您需要类似的东西:

private void search(String searchText) {
    Query query = userRef.orderBy("username").startAt(searchText).endAt(searchText + "\uf8ff");

    FirestoreRecyclerOptions<Users> options = new FirestoreRecyclerOptions.Builder<Users>()
            .setQuery(query, Users.class)
            .build();

    userAdapter = new UserAdapter(options);

    RecyclerView recyclerView = findViewById(R.id.recycler_view_search_player)

    recyclerView.setAdapter(userAdapter);
}
© www.soinside.com 2019 - 2024. All rights reserved.