【发布时间】:2017-12-19 19:25:52
【问题描述】:
我正在尝试显示 JSON 数据,但它给出了空指针异常。它无法获取我正在膨胀的自定义单个项目的上下文
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;
}
}
无法从 item_hotel.xml 布局文件中获取 TextViews 的引用。所以它给出了空指针异常。我检查了 List,该列表是非空的,所以它只是参考问题。而且,在这个
holder.addr =
(TextView)convertView.findViewById(R.id.hotel_add_mini);
(TextView) 显示冗余,但它不应该有,因为 findViewById 返回一个视图,我们必须将它转换为 textView。
【问题讨论】:
-
从 API 26 开始,
findViewById对其返回类型使用推理,因此您不再需要强制转换。它的返回类型是<T extends View> T而不是View。
标签: android nullpointerexception