[英]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.