无法在GoogleMap中的ListView适配器类中将数据显示到列表中

时间:2017-12-26 05:42:27

标签: android google-maps listview

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

4 个答案:

答案 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();
}

希望这对你有用......