Фильтрация данных не работает в firestore android

Я работаю над приложением, в котором я отфильтровал свои данные из 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);
}
        

Если вы хотите, чтобы локальный поиск перерабатывал элемент, просто отфильтруйте доступный список в представлении перезаписи и обновите список.

Aditya Nandardhane 17.09.2022 06:33

@AdityaNandardhane брат, я фильтрую данные из firestore, но этот код не работает, когда я что-то ввожу в поиске, он ничего не показывает

user20008723 17.09.2022 10:51

Поскольку вы используете Java, я думаю, что этот ресурс действительно поможет. Если вы когда-нибудь захотите попробовать программировать на Kotlin, этот ресурс тоже поможет.

Alex Mamo 17.09.2022 13:19

@AlexMamo, сэр, я использую тот же подход к фильтрации, но проблема в том, почему этот код у меня не работает.

user20008723 17.09.2022 17:57

Извините, сэр, но мне трудно понять предложенные вами документы.

user20008723 17.09.2022 18:34

«не работает» не дает достаточно информации, чтобы мы могли помочь. Что именно не работает? У вас есть ошибки?

Alex Mamo 18.09.2022 10:39

Пожалуйста, добавьте эту информацию к своему вопросу и укажите точную строку кода, в которой возникает ошибка.

Alex Mamo 18.09.2022 11:38

@AlexMamo, сэр, я добавил детали, пожалуйста, проверьте

user20008723 18.09.2022 11:45

Где именно в вашем коде вы используете .toArray()?

Alex Mamo 18.09.2022 12:23

Сэр, я добавил код, пожалуйста, проверьте

user20008723 18.09.2022 12:27

@AdityaNandardhane, брат, можешь помочь мне с этим?? Пожалуйста, проверьте

user20008723 18.09.2022 13:43

@AlexMamo, сэр, вы проверили это? пожалуйста

user20008723 18.09.2022 18:28

Я не вижу проблемы на первый взгляд. Вы пытались клонировать репозиторий ?

Alex Mamo 19.09.2022 09:20

@VivekMFauzdar вы получаете всех пользователей в первый раз? или вы используете нумерацию страниц, пожалуйста, подтвердите. Если вы изначально извлекаете всех пользователей, вам не нужно фильтровать с помощью firebase.

Aditya Nandardhane 19.09.2022 10:06

@AdityaNandardhane брат, я вообще не использую нумерацию страниц, все, что я просто пытаюсь сделать, это отфильтровать данные в recyclerview и добавить эти данные в recyclerview

user20008723 19.09.2022 17:22

@AlexMamo, сэр, я пытаюсь клонировать это, но это также не работает в моем случае, я создал базу данных firestore с названием коллекции «продукт», как показано, но при поиске ничего не появляется ??

user20008723 19.09.2022 17:34

Я не уверен, что понимаю ваш последний комментарий.

Alex Mamo 19.09.2022 17:41

сэр, я пытался сегодня клонировать ваше приложение для фильтрации данных из кода cheper firestore, но оно не работает в моем приложении, я полностью запутался

user20008723 19.09.2022 17:49

как я создал базу данных firestore, как указано в вашем коде, но все равно она не отображается

user20008723 19.09.2022 17:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
19
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это

КОД ДЛЯ 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();
}

Другие вопросы по теме