无法从GoogleMap中的ListView Adapter类中显示数据



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适配器类中的所有数据。但是,当我们尝试将数据显示到列表视图中时,它会崩溃。 ListView Adapter类中的holder.name1.setText(pname)显示的崩溃。和错误显示NullPointerException

if中添加.setText()发生错误,因为您在if中初始化Textview name1,因此请检查下面的代码

 @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;
        }

根据我的理解,有可能显示null指针异常的理由是,您可能在'place_name'中获得null值,而另一个是您的引用r.id.name。不可用。

像以下内容一样编辑您的代码,

String pname="";
pname = ((HashMap<String, String>) newMap).get("place_name");
if(holder.name1!=null){
holder.name1.setText(pname)
}

最终解决了这个问题,愚蠢的错误我没有在r.layout.activity.list_view中添加textView。

适配器中没有问题,除了一个错误

在您的ListViewAdapter类中添加以下代码

喜欢这个

@Override
public int getCount() {
    return list2.size();
}

希望这对您有用...

最新更新