Я работаю над приложением, в котором я отфильтровал свои данные из firestore, но оно не работает, пожалуйста, подскажите, где я ошибаюсь в коде. он не показывает никаких ошибок или исключений, я понятия не имею, где это происходит не так ??
код для фильтрации данных в моем recyclerview
@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;
}
КОД ДЛЯ SEARCHVIEW В MAINACTIVITY
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);
}
@AdityaNandardhane брат, я фильтрую данные из firestore, но этот код не работает, когда я что-то ввожу в поиске, он ничего не показывает
Поскольку вы используете Java, я думаю, что этот ресурс действительно поможет. Если вы когда-нибудь захотите попробовать программировать на Kotlin, этот ресурс тоже поможет.
@AlexMamo, сэр, я использую тот же подход к фильтрации, но проблема в том, почему этот код у меня не работает.
Извините, сэр, но мне трудно понять предложенные вами документы.
«не работает» не дает достаточно информации, чтобы мы могли помочь. Что именно не работает? У вас есть ошибки?
Пожалуйста, добавьте эту информацию к своему вопросу и укажите точную строку кода, в которой возникает ошибка.
@AlexMamo, сэр, я добавил детали, пожалуйста, проверьте
Где именно в вашем коде вы используете .toArray()?
Сэр, я добавил код, пожалуйста, проверьте
@AdityaNandardhane, брат, можешь помочь мне с этим?? Пожалуйста, проверьте
@AlexMamo, сэр, вы проверили это? пожалуйста
Я не вижу проблемы на первый взгляд. Вы пытались клонировать репозиторий ?
@VivekMFauzdar вы получаете всех пользователей в первый раз? или вы используете нумерацию страниц, пожалуйста, подтвердите. Если вы изначально извлекаете всех пользователей, вам не нужно фильтровать с помощью firebase.
@AdityaNandardhane брат, я вообще не использую нумерацию страниц, все, что я просто пытаюсь сделать, это отфильтровать данные в recyclerview и добавить эти данные в recyclerview
@AlexMamo, сэр, я пытаюсь клонировать это, но это также не работает в моем случае, я создал базу данных firestore с названием коллекции «продукт», как показано, но при поиске ничего не появляется ??
Я не уверен, что понимаю ваш последний комментарий.
сэр, я пытался сегодня клонировать ваше приложение для фильтрации данных из кода cheper firestore, но оно не работает в моем приложении, я полностью запутался
как я создал базу данных firestore, как указано в вашем коде, но все равно она не отображается




Попробуй это
КОД ДЛЯ SEARCHVIEW В MAINACTIVITY
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);
}
В классе адаптера
public void filterList(ArrayList < RecyclerviewModel > filteredData) {
datalist = filteredData;
notifyDataSetChanged();
}
Если вы хотите, чтобы локальный поиск перерабатывал элемент, просто отфильтруйте доступный список в представлении перезаписи и обновите список.