ListView适配器类:
public class ListViewAdapter extends ArrayAdapter {
private Context context;
private int resource;
private ArrayList<HashMap<String,String>> list2 = new ArrayList<>();
public ListViewAdapter(Context context,int resource, List<HashMap<String, String>> list) {
super(context, resource, list);
this.resource = resource;
this.context = context;
this.list2 = (ArrayList<HashMap<String, String>>) list;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ViewHolder holder;
Object newMap = list2.get(position);
if (row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.name1 = (TextView) row.findViewById(R.id.name);
holder.add = (TextView) row.findViewById(R.id.address);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
String pname = ((HashMap<String, String>) newMap).get("place_name");
holder.name1.setText(pname);
return row;
}
public class ViewHolder {
TextView name1,add;
}
}
所有数据都来自ListView
适配器类。但是当我们尝试将数据显示到列表视图中时,它会崩溃。
holder.name1.setText(pname)
课程中显示的ListView Adapter
崩溃。错误显示NullPointerException
答案 0 :(得分:0)
在.setText()
条件错误中添加if
,因为您在Textview name1
条件下初始化if
,因此请检查以下代码
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ViewHolder holder;
Object newMap = list2.get(position);
if (row == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.name1 = (TextView) row.findViewById(R.id.name);
holder.add = (TextView) row.findViewById(R.id.address);
String pname = ((HashMap<String, String>) newMap).get("place_name");
holder.name1.setText(pname);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
return row;
}
答案 1 :(得分:0)
根据我的理解,有两个可能的原因显示空指针异常,你可能会在&#39; place_name&#39;中获得空值。另一个是你引用的R.id.name不可用。
编辑您的代码,如下所示,
String pname="";
pname = ((HashMap<String, String>) newMap).get("place_name");
if(holder.name1!=null){
holder.name1.setText(pname)
}
答案 2 :(得分:0)
最后解决了这个问题,愚蠢的错误我没有在R.layout.activity_list_view中添加TextView。
答案 3 :(得分:0)
除了一个错误
之外,适配器没有问题在ListViewAdapter类中添加以下代码
像这样@Override
public int getCount() {
return list2.size();
}
希望这对你有用......