我正在使用Firebase-UI的FirebaseRecyclerAdapter。我无法在SearchView中实现过滤器。
我的数据库:
我的问题:
如何使用FirebaseRecyclerAdapter按字符搜索FirebaseDatabase?
(我想按用户名搜索)
我的代码:我使用此方法进行搜索,我的代码中出了什么问题?
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt("~");
FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder>(
User.class, R.layout.row_search_all_users, SearchFeedFragment.AllRegisterUserViewHolder.class, Q) {
@Override
protected void populateViewHolder( SearchFeedFragment.AllRegisterUserViewHolder viewHolder,User model, int position) {
viewHolder.setUserName(model.getUsername());
viewHolder.setUserProfilePic(Common.stringToBitMap(model.getProfilepicurl()));
}
};
mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);
return false;
}
});
public static class AllRegisterUserViewHolder extends RecyclerView.ViewHolder {
View mView;
ImageView mImgProfileImage = (ImageView) itemView.findViewById(R.id.iv_searchProfilePic);
TextView mTxtProfileName = (TextView) itemView.findViewById(R.id.txt_searchProfileName);
public AllRegisterUserViewHolder(View itemView) {
super(itemView);
itemView = mView;
}
public void setUserName(String username) {
mTxtProfileName.setText(username);
}
public void setUserProfilePic(Bitmap image) {
mImgProfileImage.setImageBitmap(image);
}
}
答案 0 :(得分:1)
Queries, Part 2: Advanced Searches with Firebase, made Plug-and-Play Simple
阅读本文,您将了解Firebase实时数据库搜索的原因和方法,以及如何实施搜索查询。
您需要更新代码的一行。
Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt(newText+"\uf8ff");
这将仅适用于从头开始匹配。您还可以了解有关startAt(),endAt(),equalTo(),limitToFirst()和limitToLast()的更多信息,它们可以帮助您更好地完成搜索查询,而无需使用任何其他外部资源比firebase。
我也希望Firebase Realtime Database Rules没有问题。