[英]Filtering data is not working in firestore android
我正在开发一个应用程序,我已经从 firestore 过滤了我的数据,但它不起作用,请指导我在哪里弄错代码。 它既没有显示任何错误或异常,我也不知道哪里出了问题?
我的回收站视图中过滤数据的代码
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence keyword) {
ArrayList<RecyclerviewModel> filteredData = new ArrayList<>();
if (keyword.toString().isEmpty())
{
filteredData.addAll(backup);
}else {
firebaseFirestore.collection("users").whereEqualTo("search", keyword.toString().toLowerCase()).get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>()
{
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots)
{
datalist.clear();
if (!queryDocumentSnapshots.isEmpty()) {
for (RecyclerviewModel obj : backup) {
if (obj.getName().toString().toLowerCase().contains(keyword.toString().toLowerCase())) {
filteredData.add(obj);
}
}
}else
{
Toast.makeText(context, "data not exist", Toast.LENGTH_SHORT);
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
FilterResults results = new FilterResults();
results.values = filteredData;
results.count = filteredData.size();
return results;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
datalist.clear();
datalist.addAll((ArrayList<RecyclerviewModel>)filterResults.values);
notifyDataSetChanged();
}
};
return filter;
}
MAINACTIVITY 中的 SEARCHVIEW 代码
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
recyclerviewAdapter.getFilter().filter(newText);
return false;
}
});
它抛出的错误
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference at java.util.ArrayList.addAll(ArrayList.java:588) at com.example.sharedviewmodelapp.RecyclerviewAdapter$2.publishResults(RecyclerviewAdapter.java:239)
在 publishResults 方法行上出现错误
datalist.addAll((ArrayList<RecyclerviewModel>)filterResults.values);
RECYCLLRVIEW 适配器的代码
ArrayList<RecyclerviewModel> datalist;
ArrayList<RecyclerviewModel> backup;
Context context;
public RecyclerviewAdapter(ArrayList<RecyclerviewModel> datalist, Context context, HomeFragment homeFragment) {
this.datalist = datalist;
this.context = context;
this.homeFragment = homeFragment;
backup = new ArrayList<>(datalist);
}
尝试这个
MAINACTIVITY 中的 SEARCHVIEW 代码
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
filterData();
return false;
}
});
private void filterData() {
ArrayList < RecyclerviewModel > filteredData = new ArrayList < > ();
for (RecyclerviewModel obj: userList) {
if (obj.getName().toString().toLowerCase().contains(keyword.toString().toLowerCase())) {
filteredData.add(obj);
}
}
recyclerviewAdapter.filterList(filteredData);
}
在适配器 class
public void filterList(ArrayList < RecyclerviewModel > filteredData) {
datalist = filteredData;
notifyDataSetChanged();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.