0

thankyou in advance for looking at this pose. I am trying to filter my recyclerview using searchview and I watched a lot of tutorials in youtube and all of them is not working because when I input letter in searchbar the application is crashing. Before I insert the code I can type in searchbar and is not causing error. (The recyclerview is working well before inserting code to searchview)

java code:


import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class search extends AppCompatActivity implements SelectListener{

    RecyclerView recyclerView;
    List<canFood> foods;
    foodSearchAdapter foodSearchAdapter;
    androidx.appcompat.widget.SearchView searchView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);

        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        List<canFood> foods = new ArrayList<canFood>();

        foods.add(new canFood("Carrots", R.drawable.ic_like));
        foods.add(new canFood("Grapes and Raisins", R.drawable.ic_warn));
        foods.add(new canFood("Salt", R.drawable.ic_limit));
        foods.add(new canFood("Peanut Butter", R.drawable.ic_like));
        foods.add(new canFood("Eggs", R.drawable.ic_like));
        foods.add(new canFood("Salmon", R.drawable.ic_like));
        foods.add(new canFood("Chocolate", R.drawable.ic_warn));
        foods.add(new canFood("Cheese", R.drawable.ic_limit));
        foods.add(new canFood("Blueberries", R.drawable.ic_like));
        foods.add(new canFood("Popcorn", R.drawable.ic_like));
        foods.add(new canFood("Cashews", R.drawable.ic_limit));
        foods.add(new canFood("Almonds", R.drawable.ic_limit));
        foods.add(new canFood("Pineapple", R.drawable.ic_like));
        foods.add(new canFood("Onions", R.drawable.ic_warn));
        foods.add(new canFood("Watermelon", R.drawable.ic_like));
        foods.add(new canFood("Bread", R.drawable.ic_like));
        foods.add(new canFood("Blackberries", R.drawable.ic_like));
        foods.add(new canFood("Avocado", R.drawable.ic_warn));
        foods.add(new canFood("Corn", R.drawable.ic_like));
        foods.add(new canFood("Tomatoes", R.drawable.ic_limit));
        foods.add(new canFood("Green Peas", R.drawable.ic_like));
        foods.add(new canFood("Coffee and Tea", R.drawable.ic_warn));
        foods.add(new canFood("Apples", R.drawable.ic_like));
        foods.add(new canFood("Garlic", R.drawable.ic_warn));
        foods.add(new canFood("Broccoli", R.drawable.ic_like));
        foods.add(new canFood("Chicken", R.drawable.ic_like));
        foods.add(new canFood("Sweet Potatoes", R.drawable.ic_like));
        foods.add(new canFood("Coconut", R.drawable.ic_like));
        foods.add(new canFood("Alcohol", R.drawable.ic_warn));
        foods.add(new canFood("Pork", R.drawable.ic_like));
        foods.add(new canFood("Cinnamon", R.drawable.ic_limit));
        foods.add(new canFood("Mango", R.drawable.ic_like));
        foods.add(new canFood("Honey", R.drawable.ic_limit));
        foods.add(new canFood("Milk", R.drawable.ic_limit));
        foods.add(new canFood("Turkey", R.drawable.ic_like));
        foods.add(new canFood("Rice", R.drawable.ic_like));
        foods.add(new canFood("Beef", R.drawable.ic_like));
        foods.add(new canFood("Lemons and Limes", R.drawable.ic_warn));
        foods.add(new canFood("Bananas", R.drawable.ic_like));
        foods.add(new canFood("Strawberries", R.drawable.ic_like));
        foods.add(new canFood("Peanuts", R.drawable.ic_limit));
        foods.add(new canFood("Mushrooms", R.drawable.ic_like));
        foods.add(new canFood("Potatoes", R.drawable.ic_like));
        foods.add(new canFood("Celery", R.drawable.ic_like));
        foods.add(new canFood("Cherries", R.drawable.ic_limit));
        foods.add(new canFood("Shrimp", R.drawable.ic_like));
        foods.add(new canFood("Fish", R.drawable.ic_like));
        foods.add(new canFood("Ham", R.drawable.ic_like));
        foods.add(new canFood("Bug Spray and Sunscreen", R.drawable.ic_warn));
        foods.add(new canFood("Ice cream", R.drawable.ic_warn));
        foods.add(new canFood("Oatmeal", R.drawable.ic_like));
        foods.add(new canFood("Raw Yeast Dough", R.drawable.ic_warn));
        foods.add(new canFood("Spicy Food", R.drawable.ic_warn));
        foods.add(new canFood("Tobacco", R.drawable.ic_warn));
        foods.add(new canFood("Oranges", R.drawable.ic_like));
        foods.add(new canFood("Pears", R.drawable.ic_like));
        foods.add(new canFood("Cucumber", R.drawable.ic_like));
        foods.add(new canFood("Fat Trimmings", R.drawable.ic_limit));
        foods.add(new canFood("Bones", R.drawable.ic_warn));
        foods.add(new canFood("Plums", R.drawable.ic_warn));
        foods.add(new canFood("Raw Meat", R.drawable.ic_limit));
        foods.add(new canFood("Raw Fish", R.drawable.ic_limit));
        foods.add(new canFood("Sugary Foods", R.drawable.ic_limit));
        foods.add(new canFood("Sugary Drinks", R.drawable.ic_limit));
        foods.add(new canFood("Human Medicines", R.drawable.ic_warn));
        foods.add(new canFood("Kitchen Pantry", R.drawable.ic_warn));
        foods.add(new canFood("Candy", R.drawable.ic_warn));
        foods.add(new canFood("Toothpaste", R.drawable.ic_warn));
        foods.add(new canFood("Cocoa", R.drawable.ic_warn));
        foods.add(new canFood("Human Vitamins", R.drawable.ic_warn));
        foods.add(new canFood("Breath Fresheners", R.drawable.ic_warn));
        foods.add(new canFood("Spoiled Foods", R.drawable.ic_warn));
        foods.add(new canFood("Oily Foods", R.drawable.ic_warn));
        foods.add(new canFood("Oily Foods", R.drawable.ic_warn));
        foods.add(new canFood("Lettuce", R.drawable.ic_like));
        foods.add(new canFood("Spinach", R.drawable.ic_limit));
        foods.add(new canFood("Soaps", R.drawable.ic_warn));
        foods.add(new canFood("Yogurt", R.drawable.ic_limit));
        foods.add(new canFood("Pasta", R.drawable.ic_limit));
        foods.add(new canFood("Household Chemicals", R.drawable.ic_warn));
        foods.add(new canFood("Pizza", R.drawable.ic_warn));
        foods.add(new canFood("Laundry Supplies", R.drawable.ic_warn));
        foods.add(new canFood("Lawn and Garden Supplies", R.drawable.ic_warn));
        foods.add(new canFood("Pesticides", R.drawable.ic_warn));
        foods.add(new canFood("Baking powder", R.drawable.ic_warn));
        foods.add(new canFood("Baking soda", R.drawable.ic_warn));
        foods.add(new canFood("Chicken Skin", R.drawable.ic_warn));
        foods.add(new canFood("Chili", R.drawable.ic_warn));
        foods.add(new canFood("Bathroom Cleaning Supplies", R.drawable.ic_warn));
        foods.add(new canFood("Chives", R.drawable.ic_warn));
        foods.add(new canFood("Gravy", R.drawable.ic_warn));
        foods.add(new canFood("Ketchup", R.drawable.ic_warn));
        foods.add(new canFood("Mustard", R.drawable.ic_warn));
        foods.add(new canFood("Coke", R.drawable.ic_warn));
        foods.add(new canFood("Xylitol", R.drawable.ic_warn));
        foods.add(new canFood("Juice", R.drawable.ic_warn));
        foods.add(new canFood("Pickles", R.drawable.ic_warn));
        foods.add(new canFood("Olives", R.drawable.ic_warn));
        foods.add(new canFood("Grilled Foods", R.drawable.ic_limit));
        foods.add(new canFood("Pumpkin", R.drawable.ic_like));


        foodSearchAdapter = new foodSearchAdapter(this, foods, this);
        recyclerView.setAdapter(foodSearchAdapter);

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

            @Override
            public boolean onQueryTextChange(String newText) {
                filter(newText);
                return true;
            }
        });


    }



    private void filter(String newText) {
        List<canFood> filteredList = new ArrayList<>();
        for (canFood item : foods){
            if (item.getFoodname().toLowerCase().contains(newText.toLowerCase())){
                filteredList.add(item);
            }
        }
        foodSearchAdapter.filterList(filteredList);

    }


    @Override
    public void onItemClicked(canFood canFood) {
        Toast.makeText(this, canFood.getFoodname(), Toast.LENGTH_SHORT).show();
    }
}

xml code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".search">

    <androidx.appcompat.widget.SearchView
        android:id="@+id/searchView"
        android:layout_width="1800dp"
        android:layout_height="40dp"
        android:layout_margin="8dp"
        android:background="@drawable/search_view_bg"
        android:iconifiedByDefault="false"
        android:queryHint="Search Food Here ...">

    </androidx.appcompat.widget.SearchView>


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/searchView"/>
</RelativeLayout>

adapter code:

package com.example.dogapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

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

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

public class foodSearchAdapter extends RecyclerView.Adapter<foodViewHolder> {


    Context context;
   List<canFood> foods;
   SelectListener listener;




    public foodSearchAdapter(Context context, List<canFood> foods, SelectListener listener) {
        this.context = context;
        this.foods = foods;
        this.listener = listener;
    }



    @NonNull
    @Override
    public foodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new foodViewHolder(LayoutInflater.from(context).inflate(R.layout.food_view,parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull foodViewHolder holder, int position) {
        holder.nameView.setText(foods.get(position).getFoodname());
        holder.imageView.setImageResource(foods.get(position).getIcon());

        holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onItemClicked(foods.get(position));
            }
        });
    }

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

    public void filterList(List<canFood> filteredList){
            foods = filteredList;
            notifyDataSetChanged();
    }




}

viewholder code:

package com.example.dogapplication;

import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

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

public class foodViewHolder extends RecyclerView.ViewHolder {

    ImageView imageView;
    TextView nameView;
    RelativeLayout relativeLayout;


    public foodViewHolder(@NonNull View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.icon);
        nameView = itemView.findViewById(R.id.foodname);
relativeLayout = itemView.findViewById(R.id.main_container);

    }
}

crash log

2023-01-02 17:37:34.027 5420-5420/com.example.dogapplication E/InputEventSender: Exception dispatching finished signal for seq=70
2023-01-02 17:37:34.027 5420-5420/com.example.dogapplication E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
2023-01-02 17:37:34.029 5420-5420/com.example.dogapplication E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
        at com.example.dogapplication.search.filter(search.java:158)
        at com.example.dogapplication.search.access$000(search.java:15)
        at com.example.dogapplication.search$1.onQueryTextChange(search.java:38)
        at androidx.appcompat.widget.SearchView.onTextChanged(SearchView.java:1198)
        at androidx.appcompat.widget.SearchView$10.onTextChanged(SearchView.java:1736)
        at android.widget.TextView.sendOnTextChanged(TextView.java:10789)
        at android.widget.TextView.handleTextChanged(TextView.java:10904)
        at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:13807)
        at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1268)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:577)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:315)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:305)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:49)
        at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:228)
        at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:141)
        at androidx.emoji2.viewsintegration.EmojiKeyListener.onKeyDown(EmojiKeyListener.java:58)
        at android.widget.TextView.doKeyDown(TextView.java:8557)
        at android.widget.TextView.onKeyDown(TextView.java:8331)
        at android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:862)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2854)
        at android.view.View.dispatchKeyEvent(View.java:14478)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:490)
        at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1880)
        at android.app.Activity.dispatchKeyEvent(Activity.java:4156)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:601)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3106)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:404)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6278)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6144)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5626)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5814)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5871)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
2023-01-02 17:37:34.029 5420-5420/com.example.dogapplication E/MessageQueue-JNI:     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5847)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6005)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3158)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2722)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2713)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3135)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loopOnce(Looper.java:161)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7839)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
2023-01-02 17:37:34.029 5420-5420/com.example.dogapplication D/AndroidRuntime: Shutting down VM
2023-01-02 17:37:34.031 5420-5420/com.example.dogapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.dogapplication, PID: 5420
    java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
        at com.example.dogapplication.search.filter(search.java:158)
        at com.example.dogapplication.search.access$000(search.java:15)
        at com.example.dogapplication.search$1.onQueryTextChange(search.java:38)
        at androidx.appcompat.widget.SearchView.onTextChanged(SearchView.java:1198)
        at androidx.appcompat.widget.SearchView$10.onTextChanged(SearchView.java:1736)
        at android.widget.TextView.sendOnTextChanged(TextView.java:10789)
        at android.widget.TextView.handleTextChanged(TextView.java:10904)
        at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:13807)
        at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1268)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:577)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:315)
        at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:305)
        at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:49)
        at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:228)
        at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:141)
        at androidx.emoji2.viewsintegration.EmojiKeyListener.onKeyDown(EmojiKeyListener.java:58)
        at android.widget.TextView.doKeyDown(TextView.java:8557)
        at android.widget.TextView.onKeyDown(TextView.java:8331)
        at android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:862)
        at android.view.KeyEvent.dispatch(KeyEvent.java:2854)
        at android.view.View.dispatchKeyEvent(View.java:14478)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1964)
        at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:490)
        at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1880)
        at android.app.Activity.dispatchKeyEvent(Activity.java:4156)
        at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:124)
        at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:86)
        at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:142)
        at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:601)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:60)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3106)
        at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:404)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6278)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6144)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5626)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5814)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5871)
2023-01-02 17:37:34.032 5420-5420/com.example.dogapplication E/AndroidRuntime:     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5657)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5630)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5683)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5649)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5847)
        at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:6005)
        at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:3158)
        at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:2722)
        at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:2713)
        at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:3135)
        at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:154)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loopOnce(Looper.java:161)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7839)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)

I tried watching different kind of tutorial for searchview and recyclerview but when I insert letter to filter the recycler view the error occurs.

mbgaming
  • 3
  • 4

3 Answers3

0

Your problem can be found using the help of the crash log. The first line there states that:

2023-01-02 17:37:34.029 5420-5420/com.example.dogapplication E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at com.example.dogapplication.search.filter(search.java:158)

If we look at the method, we will see:

   private void filter(String newText) {
        List<canFood> filteredList = new ArrayList<>();
        for (canFood item : foods){
            if (item.getFoodname().toLowerCase().contains(newText.toLowerCase())){
                filteredList.add(item);
            }
        }
        foodSearchAdapter.filterList(filteredList);

    }

The crash comes from the fact that the foods list you want to iterate on is null. Why is it null? Because of this:

  1. You are declaring it as a member variable at the beginning of your class

public class search extends AppCompatActivity implements SelectListener{ RecyclerView recyclerView; List foods; foodSearchAdapter foodSearchAdapter; androidx.appcompat.widget.SearchView searchView;

  1. But you are never giving it any value. The logic you have is setting a completely different foods list (local variable)

    List foods = new ArrayList();

tomerpacific
  • 4,704
  • 13
  • 34
  • 52
0

In filter method, you are iterating over the list that never defined.

So in onCreate method in search class, initialize it first before adding data.

How to do that,

  1. Initialise the global arrayList so that you can modify it.
List <canFood> foods = new ArrayList();
  1. Remove below line from onCreate method,
List<canFood> foods = new ArrayList<canFood>();

And add below line in that place to avoid data duplication.

foods.clear()

Now you are done. Your code will run.

Additional notes

Whenever you create custom class, name it capitalised to avoid conflicts with variables. i.e, Your model class canFood should be named as CanFood Your adapter class foodSearchAdapter should be named as FoodSearchAdapter.

DHAVAL A.
  • 2,251
  • 2
  • 12
  • 27
0

public class search extends AppCompatActivity implements SelectListener{

RecyclerView recyclerView;
List<canFood> foods =  new ArrayList() ;
foodSearchAdapter foodSearchAdapter;
androidx.appcompat.widget.SearchView searchView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search);

    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
    foods.add(new canFood("Carrots", R.drawable.ic_like));
    foods.add(new canFood("Grapes and Raisins", R.drawable.ic_warn));
    foods.add(new canFood("Salt", R.drawable.ic_limit));
    foods.add(new canFood("Peanut Butter", R.drawable.ic_like));
    foods.add(new canFood("Eggs", R.drawable.ic_like));
    foods.add(new canFood("Salmon", R.drawable.ic_like));
    foods.add(new canFood("Chocolate", R.drawable.ic_warn));
    foods.add(new canFood("Cheese", R.drawable.ic_limit));
    foods.add(new canFood("Blueberries", R.drawable.ic_like));
    foods.add(new canFood("Popcorn", R.drawable.ic_like));
    foods.add(new canFood("Cashews", R.drawable.ic_limit));
    foods.add(new canFood("Almonds", R.drawable.ic_limit));
    foods.add(new canFood("Pineapple", R.drawable.ic_like));
    foods.add(new canFood("Onions", R.drawable.ic_warn));
    foods.add(new canFood("Watermelon", R.drawable.ic_like));
    foods.add(new canFood("Bread", R.drawable.ic_like));
    foods.add(new canFood("Blackberries", R.drawable.ic_like));
    foods.add(new canFood("Avocado", R.drawable.ic_warn));
    foods.add(new canFood("Corn", R.drawable.ic_like));
    foods.add(new canFood("Tomatoes", R.drawable.ic_limit));
    foods.add(new canFood("Green Peas", R.drawable.ic_like));
    foods.add(new canFood("Coffee and Tea", R.drawable.ic_warn));
    foods.add(new canFood("Apples", R.drawable.ic_like));
    foods.add(new canFood("Garlic", R.drawable.ic_warn));
    foods.add(new canFood("Broccoli", R.drawable.ic_like));
    foods.add(new canFood("Chicken", R.drawable.ic_like));
    foods.add(new canFood("Sweet Potatoes", R.drawable.ic_like));
    foods.add(new canFood("Coconut", R.drawable.ic_like));
    foods.add(new canFood("Alcohol", R.drawable.ic_warn));
    foods.add(new canFood("Pork", R.drawable.ic_like));
    foods.add(new canFood("Cinnamon", R.drawable.ic_limit));
    foods.add(new canFood("Mango", R.drawable.ic_like));
    foods.add(new canFood("Honey", R.drawable.ic_limit));
    foods.add(new canFood("Milk", R.drawable.ic_limit));
    foods.add(new canFood("Turkey", R.drawable.ic_like));
    foods.add(new canFood("Rice", R.drawable.ic_like));
    foods.add(new canFood("Beef", R.drawable.ic_like));
    foods.add(new canFood("Lemons and Limes", R.drawable.ic_warn));
    foods.add(new canFood("Bananas", R.drawable.ic_like));
    foods.add(new canFood("Strawberries", R.drawable.ic_like));
    foods.add(new canFood("Peanuts", R.drawable.ic_limit));
    foods.add(new canFood("Mushrooms", R.drawable.ic_like));
    foods.add(new canFood("Potatoes", R.drawable.ic_like));
    foods.add(new canFood("Celery", R.drawable.ic_like));
    foods.add(new canFood("Cherries", R.drawable.ic_limit));
    foods.add(new canFood("Shrimp", R.drawable.ic_like));
    foods.add(new canFood("Fish", R.drawable.ic_like));
    foods.add(new canFood("Ham", R.drawable.ic_like));
    foods.add(new canFood("Bug Spray and Sunscreen", R.drawable.ic_warn));
    foods.add(new canFood("Ice cream", R.drawable.ic_warn));
    foods.add(new canFood("Oatmeal", R.drawable.ic_like));
    foods.add(new canFood("Raw Yeast Dough", R.drawable.ic_warn));
    foods.add(new canFood("Spicy Food", R.drawable.ic_warn));
    foods.add(new canFood("Tobacco", R.drawable.ic_warn));
    foods.add(new canFood("Oranges", R.drawable.ic_like));
    foods.add(new canFood("Pears", R.drawable.ic_like));
    foods.add(new canFood("Cucumber", R.drawable.ic_like));
    foods.add(new canFood("Fat Trimmings", R.drawable.ic_limit));
    foods.add(new canFood("Bones", R.drawable.ic_warn));
    foods.add(new canFood("Plums", R.drawable.ic_warn));
    foods.add(new canFood("Raw Meat", R.drawable.ic_limit));
    foods.add(new canFood("Raw Fish", R.drawable.ic_limit));
    foods.add(new canFood("Sugary Foods", R.drawable.ic_limit));
    foods.add(new canFood("Sugary Drinks", R.drawable.ic_limit));
    foods.add(new canFood("Human Medicines", R.drawable.ic_warn));
    foods.add(new canFood("Kitchen Pantry", R.drawable.ic_warn));
    foods.add(new canFood("Candy", R.drawable.ic_warn));
    foods.add(new canFood("Toothpaste", R.drawable.ic_warn));
    foods.add(new canFood("Cocoa", R.drawable.ic_warn));
    foods.add(new canFood("Human Vitamins", R.drawable.ic_warn));
    foods.add(new canFood("Breath Fresheners", R.drawable.ic_warn));
    foods.add(new canFood("Spoiled Foods", R.drawable.ic_warn));
    foods.add(new canFood("Oily Foods", R.drawable.ic_warn));
    foods.add(new canFood("Oily Foods", R.drawable.ic_warn));
    foods.add(new canFood("Lettuce", R.drawable.ic_like));
    foods.add(new canFood("Spinach", R.drawable.ic_limit));
    foods.add(new canFood("Soaps", R.drawable.ic_warn));
    foods.add(new canFood("Yogurt", R.drawable.ic_limit));
    foods.add(new canFood("Pasta", R.drawable.ic_limit));
    foods.add(new canFood("Household Chemicals", R.drawable.ic_warn));
    foods.add(new canFood("Pizza", R.drawable.ic_warn));
    foods.add(new canFood("Laundry Supplies", R.drawable.ic_warn));
    foods.add(new canFood("Lawn and Garden Supplies", R.drawable.ic_warn));
    foods.add(new canFood("Pesticides", R.drawable.ic_warn));
    foods.add(new canFood("Baking powder", R.drawable.ic_warn));
    foods.add(new canFood("Baking soda", R.drawable.ic_warn));
    foods.add(new canFood("Chicken Skin", R.drawable.ic_warn));
    foods.add(new canFood("Chili", R.drawable.ic_warn));
    foods.add(new canFood("Bathroom Cleaning Supplies", R.drawable.ic_warn));
    foods.add(new canFood("Chives", R.drawable.ic_warn));
    foods.add(new canFood("Gravy", R.drawable.ic_warn));
    foods.add(new canFood("Ketchup", R.drawable.ic_warn));
    foods.add(new canFood("Mustard", R.drawable.ic_warn));
    foods.add(new canFood("Coke", R.drawable.ic_warn));
    foods.add(new canFood("Xylitol", R.drawable.ic_warn));
    foods.add(new canFood("Juice", R.drawable.ic_warn));
    foods.add(new canFood("Pickles", R.drawable.ic_warn));
    foods.add(new canFood("Olives", R.drawable.ic_warn));
    foods.add(new canFood("Grilled Foods", R.drawable.ic_limit));
    foods.add(new canFood("Pumpkin", R.drawable.ic_like));


    foodSearchAdapter = new foodSearchAdapter(this, foods, this);
    recyclerView.setAdapter(foodSearchAdapter);

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

        @Override
        public boolean onQueryTextChange(String newText) {
            filter(newText);
            return true;
        }
    });


}



private void filter(String newText) {
    List<canFood> filteredList = new ArrayList<>();
    for (canFood item : foods){
        if (item.getFoodname().toLowerCase().contains(newText.toLowerCase())){
            filteredList.add(item);
        }
    }
    foodSearchAdapter.filterList(filteredList);

}


@Override
public void onItemClicked(canFood canFood) {
    Toast.makeText(this, canFood.getFoodname(), Toast.LENGTH_SHORT).show();
}

}