I am trying to display JSON data but it's giving null pointer exception. It can't get the context of custom single item that I'm inflating
public class HotelAdapter extends ArrayAdapter{
private List<HotelModel> hotelModelList;
private LayoutInflater layoutInflater;
private int resource;
public HotelAdapter(@NonNull Context context, int resource, @NonNull
List<HotelModel> objects) {
super(context, resource, objects);
hotelModelList = objects;
this.resource=resource;
layoutInflater =
(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull
ViewGroup parent) {
ViewHolder holder = null;
if (convertView==null){
holder =new ViewHolder();
convertView = layoutInflater.inflate(R.layout.item_hotel,null);
holder.addr =
(TextView)convertView.findViewById(R.id.hotel_add_mini);
holder.categ =
(TextView)convertView.findViewById(R.id.hotel_rating);
holder.name =
(TextView)convertView.findViewById(R.id.hotel_name);
holder.price =
(TextView)convertView.findViewById(R.id.hotel_price);
holder.rating =
(RatingBar)convertView.findViewById(R.id.ratingBar2);
}
else {
holder= (ViewHolder) convertView.getTag();
}
holder.addr.setText(hotelModelList.get(position).getAddr());
holder.categ.setText(hotelModelList.get(position).getCateg());
holder.name.setText(hotelModelList.get(position).getName());
holder.price.setText(Integer.toString(hotelModelList.get(position).getPrice()));
holder.rating.setRating(hotelModelList.get(position).getRating());
return convertView;
}
class ViewHolder{
private ImageView img;
private TextView name;
private TextView addr;
private TextView categ;
private TextView price;
private RatingBar rating;
}
}
It can't get the reference of TextViews from item_hotel.xml layout files. So It's giving null pointer exception. I have checked the List<>, the list is non null so it's just the reference problem. Moreover, in this
holder.addr =
(TextView)convertView.findViewById(R.id.hotel_add_mini);
The (TextView) is showing redundant but it shouldn't have as findViewById returns a view and we have to cast it into textView.
findViewByIduses inference for its return type, so you no longer have to cast. It's return type is<T extends View> TnotViewanymore.