简体   繁体   中英

Adapter is throwing a java.lang.NullPointerException

I'm getting the following error:

java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference at com.example.steblinatetiana.lesson02.SportAdapter.onBindViewHolder(SportAdapter.java:66) at com.example.steblinatetian

This is my code:

public class SportAdapter extends Adapter<BaseViewHolder> {

    private static OnItemClickListener clickListener;
    private LayoutInflater inflater;
    private List<Sport> sports;

    public SportAdapter(Context context, List<Sport> sports) {
        this.inflater = LayoutInflater.from(context);
        this.sports = sports;
    }

    static void setOnClickListener(MainActivity mainActivity) {
    }

    @NonNull
    @Override
    public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new BaseViewHolder(inflater, parent);

    }


    @Override
    public void onBindViewHolder(BaseViewHolder holder, final int position) {
        final Sport sport = sports.get(position);
        holder.bind(sport);

        SportInfoFragment sportInfoFragment = new SportInfoFragment();
        Bundle bundle = new Bundle();
        bundle.putString("sport", String.valueOf(sport));
        sportInfoFragment.setArguments(bundle);


        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(view.getContext(), InfoActivity.class);
                if (view.getContext().getResources() != null) {
                    intent.putExtra("sport", sport);
                }
                view.getContext().startActivity(intent);
            }

        });
    }

    @Override
    public int getItemCount() {
        return 20 ;
    }


    public OnItemClickListener getClickListener() {
        return clickListener;
    }

    public LayoutInflater getInflater() {
        return inflater;
    }

    public void setInflater(LayoutInflater inflater) {
        this.inflater = inflater;
    }


    void setOnClickListener(OnItemClickListener itemClickListener) {
        clickListener = itemClickListener;

    }
}

How can this error be fixed?

You have to be sure that your List is not null before put it in to Adapter. For this add @NonNull annotation in constructor to be sure.

public SportAdapter(Context context, @NonNull List<Sport> sports) {
    this.inflater = LayoutInflater.from(context);
    this.sports = sports;
}

Also you made some mistake in getItems method. Change it to this.

@Override
public int getItemCount() {
    return sports.getSize();
}

Looks like your sports list is null. You can avoid it by doing this

public SportAdapter(Context context, List<Sport> sports) {
   this.inflater = LayoutInflater.from(context);
   this.sports = Objects.requireNonNull(sports);
}

You're app is still going to crash, but at least you'll know exactly why

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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