java - Firestore search for a specific document using whereequalto returns nothing
问题描述
I'm trying to implement search feature inside firestore collection where it should fetch and display all document containing my entered string into my firestore recycler view but however my recycler view is always empty and is not returning any items. Please take a look at my code: //This method will load data into recycler view
private void initializeData()
{
db = FirebaseFirestore.getInstance();
//Query query = null;
Query query;
if (txt!=null){
query = db.collection("Items").whereEqualTo(txt, true);
}else{
query = db.collection("Items");
s="Items";
}
FirestoreRecyclerOptions<FriendsResponse> response = new FirestoreRecyclerOptions.Builder<FriendsResponse>()
.setQuery(query, FriendsResponse.class)
.build();
adapter = new FirestoreRecyclerAdapter<FriendsResponse, FriendsHolder>(response) {
@Override
public void onBindViewHolder(FriendsHolder holder, int position, FriendsResponse model) {
String id = getSnapshots().getSnapshot(position).getId();
holder.exname.setText(id);
db.collection("Items").document(id).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
DocumentSnapshot document = task.getResult();
String url= (String) document.getData().get("imageurl");
// Toast.makeText(getContext(),url,Toast.LENGTH_LONG).show();
Glide.with(getContext()).load(url).into(holder.imgmenu);
}
});
}
@Override
public FriendsHolder onCreateViewHolder(ViewGroup group, int i) {
View view = LayoutInflater.from(group.getContext())
.inflate(R.layout.menu_item, group, false);
return new FriendsHolder(view);
}
@Override
public void onError(FirebaseFirestoreException e) {
Log.e("error", e.getMessage());
}
};
adapter.notifyDataSetChanged();
//int spaceInPixels = 200;
DividerItemDecoration verticalDecoration = new DividerItemDecoration(recyclerView.getContext(),
DividerItemDecoration.HORIZONTAL);
Drawable verticalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.divider_vertical);
verticalDecoration.setDrawable(verticalDivider);
recyclerView.addItemDecoration(verticalDecoration);
DividerItemDecoration horizontalDecoration = new DividerItemDecoration(recyclerView.getContext(),
DividerItemDecoration.VERTICAL);
Drawable horizontalDivider = ContextCompat.getDrawable(getActivity(), R.drawable.divider_horizontal);
horizontalDecoration.setDrawable(horizontalDivider);
recyclerView.addItemDecoration(horizontalDecoration);
recyclerView.setAdapter(adapter);
}
This is the code for my search bar:
public void search(){
//setContentView(R.layout.view_feed_toolbar);
searchBar = (MaterialSearchBar) getActivity().findViewById(R.id.searchBar);
searchBar.setSpeechMode(false);
searchBar.enableSearch();
searchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
@Override
public void onSearchStateChanged(boolean enabled) {
String s = enabled ? "enabled" : "disabled";
Toasty.info(getContext(), "Search " + s, Toast.LENGTH_SHORT,true).show();
if (s.equals("disabled")){
searchBar.setVisibility(View.INVISIBLE);
txt=null;
initializeData();
}
}
@Override
public void onSearchConfirmed(CharSequence text) {
txt=text.toString();
initializeData();
}
@Override
public void onButtonClicked(int buttonCode) {
}
});
}
解决方案
推荐阅读
- regex - 用正则表达式替换数组宏
- sas - SAS中只输出ROC曲线
- css - 如何设置 XML 驱动的 URL 的样式
- ruby - 如何向 Edge/IE WebDriver 传递/创建虚假媒体流?
- android - 如何检查recyclerView中是否存在新添加的项目?
- hyperledger-fabric - 无法将 Hyperledger Fabric Marbles 链代码从存储库安装到对等点
- node.js - Graphql 与非 Graphql React-Mongoose App 的区别
- jenkins - 无论如何使用Jenkins将git repo从一个EC2实例复制到另一个EC2实例?
- datetime - UTC 到本地时区之间的 C# DateTime 转换
- cuda - 如何使用占位符结合推力比较?