繁体   English   中英

过滤数据在 Firestore android 中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM