java.lang.NullPointerException:尝试在空对象引用上调用接口方法'java.lang.Object [] java.util.Collection.toArray()'

问题描述 投票:-2回答:1

我创建了回收站视图,并在其中显示了我从Firestore数据库中获取的数据。现在我在回收站上使用搜索视图,但是当我尝试搜索时出现错误

Adapter.java

package ui;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import part.time.job.v2.JobdescriptionActivity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import model.Jobpost;
import part.time.job.v2.R;

public class JournalRecyclerAdapter extends RecyclerView.Adapter<JournalRecyclerAdapter.ViewHolder> implements Filterable {

    private Context context;
    private List<Jobpost> journalList;
    private List<Jobpost> exampleListFull;



    public JournalRecyclerAdapter(Context context, List<Jobpost> journalList) {
        this.context = context;
        this.journalList = journalList;
        exampleListFull = new ArrayList<>(journalList);

    }

    @NonNull
    @Override
    public JournalRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {

        View view= LayoutInflater.from(context)
                .inflate(R.layout.journal_row, viewGroup, false);

        return new ViewHolder(view, context);


    }

    @Override
    public void onBindViewHolder(@NonNull JournalRecyclerAdapter.ViewHolder viewHolder, int position) {

        final Jobpost jobpost= journalList.get(position);

        viewHolder.title.setText(jobpost.getTitle());
        viewHolder.loc.setText(jobpost.getLocation());
        viewHolder.date.setText(jobpost.getJobdate());
        viewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(context, JobdescriptionActivity.class);
                i.putExtra("title",jobpost.getTitle());
                i.putExtra("desc",jobpost.getDesc());
                i.putExtra("category",jobpost.getCategory());
                i.putExtra("age",jobpost.getAge());
                i.putExtra("vacancy",jobpost.getVacancy());
                i.putExtra("location",jobpost.getLocation());
                i.putExtra("Date",jobpost.getJobdate());
                i.putExtra("time",jobpost.getTime());
                i.putExtra("Workinghours",jobpost.getWorkinghour());
                i.putExtra("Jobexpire",jobpost.getExpire());
                i.putExtra("userid",jobpost.getUserId());
                context.startActivity(i);

            }
        });


    }

    @Override
    public int getItemCount() {
        return journalList.size();
    }

    @Override
    public Filter getFilter() {


        return exampleFilter;
    }
    private Filter exampleFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<Jobpost> filteredList = new ArrayList<>();

            if (constraint.toString().isEmpty()) {
                filteredList.addAll(exampleListFull);
            } else {

                for (Jobpost item : exampleListFull) {
                    if (item.getTitle().contains(constraint.toString().toLowerCase())) {
                        filteredList.add(item);
                    }
                }
            }

            FilterResults results = new FilterResults();
            results.values = filteredList;

            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            journalList.clear();
            journalList.addAll((Collection<? extends Jobpost>) results.values);
            notifyDataSetChanged();
        }
    };

    public class ViewHolder  extends RecyclerView.ViewHolder{
        public TextView
                title,
                loc,
                date;
       LinearLayout linearLayout;

        String userId;



        public ViewHolder(@NonNull View itemView, Context ctx) {
            super(itemView);

            context = ctx;
            title = itemView.findViewById(R.id.jobTitle);
            loc = itemView.findViewById(R.id.locat);
            date = itemView.findViewById(R.id.jobDate);
            linearLayout=itemView.findViewById(R.id.linearLayout1);
        }
    }
}

java文件

package part.time.job.v2;


import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.SearchView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;

import java.util.ArrayList;
import java.util.List;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import model.Jobpost;
import ui.JournalRecyclerAdapter;
import util.JournalApi;


/**
 * A simple {@link Fragment} subclass.
 */
public class AlljobFragment extends Fragment {

    private FirebaseUser user;
    private FirebaseAuth firebaseAuth;
    private FirebaseAuth.AuthStateListener authStateListener;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private List<Jobpost> journalList;
    private RecyclerView recyclerView;
    private JournalRecyclerAdapter journalRecyclerAdapter;


    private CollectionReference collectionReference=db.collection("Job Post1");
    private TextView noJournalEntry;



    public AlljobFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.fragment_alljob, container, false);
        firebaseAuth= FirebaseAuth.getInstance();
        user =firebaseAuth.getCurrentUser();
        setHasOptionsMenu(true);


        noJournalEntry= view.findViewById(R.id.no_list);
        journalList=new ArrayList<>();

        recyclerView=view.findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        return view;
    }


    @Override
    public void onStart() {
        super.onStart();
        if (journalList!=null){
            journalList.clear();
        }

        collectionReference.get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
                        if (!queryDocumentSnapshots.isEmpty()){
                            for (QueryDocumentSnapshot journals: queryDocumentSnapshots){
//                                Journal journal=journals.toObject(Journal.class);
                                Jobpost jobpost=journals.toObject(Jobpost.class);
                                journalList.add(jobpost);

                            }

                            journalRecyclerAdapter = new JournalRecyclerAdapter(getActivity(),journalList);
                            recyclerView.setAdapter(journalRecyclerAdapter);
                            journalRecyclerAdapter.notifyDataSetChanged();

                        }else {

                            noJournalEntry.setVisibility(View.VISIBLE);

                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });

    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {

        menu.clear();

        inflater.inflate(R.menu.menu, menu);
        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView =  (SearchView) item.getActionView();
        searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                journalRecyclerAdapter.getFilter().filter(newText);
                return false;
            }
        });

    }



}

你能告诉我我要去哪里错吗?

并且当我在适配器类publishResults()中添加了异常但在单击搜索视图时没有搜索数据

android firebase android-recyclerview searchview android-filterable
1个回答
0
投票

我使用了try and catch并成功了

 private Filter exampleFilter = new Filter() {

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                List<Jobpost> filteredList = new ArrayList<>();
                try {     //here


                    if (constraint == null || constraint.length() == 0) {
                        filteredList.addAll(jobpostList1);
                    } else {
                        String filterPattern = constraint.toString().toLowerCase().trim();

                        for (Jobpost jobpost : jobpostList1) {
                            if (jobpost.getTitle().toLowerCase().contains(filterPattern) || jobpost.getLocation().toLowerCase().contains(filterPattern)) {
                                filteredList.add(jobpost);
                            }
                        }
                    }
                }catch (NullPointerException e){                      //here
                    System.out.print("NullPointerException Caught");

                }

                    FilterResults results = new FilterResults();
                    results.values = filteredList;


                    return results;

            }


            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

    journalList.clear();
    journalList.addAll(((List) results.values));
    notifyDataSetChanged();

            }
        };
© www.soinside.com 2019 - 2024. All rights reserved.