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.