简体   繁体   English

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

[英]How to make a username search using Firebase Firestore?

I am currently trying to implement a search method via a Firestore query so the user can search other users by typing in their username in an EditText which should display the result in a RecyclerView. 我目前正在尝试通过Firestore查询实现搜索方法,以便用户可以通过在EditText中键入其用户名来搜索其他用户,该用户名应在RecyclerView中显示结果。 I tried some other variants of code but it seems that the query is never triggered and I don't know where the problem is. 我尝试了其他一些代码变体,但似乎查询从未触发,并且我不知道问题出在哪里。 Any help is much appreciated! 任何帮助深表感谢!

Here is my activity with the search field: 这是我在搜索字段中的活动:

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);

    }

Here is my UserAdapter: 这是我的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);
        }
    }
}

And here is my User class: 这是我的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;
    }
    }

Your search method creates a new adapter, but doesn't associate it with the recyclerView in any way. 您的search方法将创建一个新适配器,但不会以任何方式将其与recyclerView关联。

So you'll need something like: 因此,您将需要以下内容:

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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 android searchView 从 firebase firestore 中搜索数据列表 - How to search list of data from firebase firestore using android searchView 如何搜索给定的firebase数据库中是否存在用户名? - How to search if a username exist in the given firebase database? 如何使用 Firebase Firestore 获取查询数据? - How to get query data using Firebase Firestore? 如何使仅用户名的简单用户登录(firebase) - How to make simple user sign in with just username (firebase) Firebase android:使用户名唯一 - Firebase android : make username unique 如何在Android中将这种结构发送到Firebase Firestore? - How to make this kind of structure in android to be sent to firebase firestore? 安卓 | Kotlin:如何从 Firebase Cloud Firestore 制作 RecyclerView itemClick? - Android | Kotlin: How to make RecyclerView itemClick from Firebase Cloud Firestore? 如何确保您已在 Firebase 控制台上启用 Firestore? - How to make sure you have enabled Firestore on the Firebase console? 如何使 Fragment + Firebase Firestore 工作而不会泄漏资源(在 Android 中)? - How to make Fragment + Firebase firestore work without leaking resources(in Android)? 在Firebase数据库中搜索用户名和带有查询的电子邮件 - Search Firebase Database for Username AND Email with a Query
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM