为ListView添加适配器时,出现空指针异常

ListView是一个经常要使用的控件,大部分情况下,我们都会通过适配器来为ListView添加内容,即调用ListView中的setAdapter(ListAdapter adapter)方法,其参数adapter是我们单独定义的。在调用这个方法的时候,一旦出现空指针异常,我们的第一反应就是检查ListView有没有实例化,但是我们发现ListView已经实例化了还是会出现这种异常,这是为什么呢??或许就是因为我们的这个第一反应才导致问题这么纠结。

我今天就遇到了这样的问题,

parseBtn = (Button) findViewById(R.id.parse);
listView = (ListView) findViewById(R.id.listview);
parseBtn.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		persons = MainActivity.this.readXml();
		adapter = new ArrayAdapter(MainActivity.this,
			android.R.layout.simple_expandable_list_item_1, persons);
		listView.setAdapter(adapter);
         }
});
通过findViewById已经获取到了一个ListView对象,还是出现了空指针异常,当时实在想不明白,

然后我就想是不是setAdapter()方法的参数adapter是null导致的呢?通过检测发现adapter对象不是空的,我就更疑惑了,

然后我就进一步往前看,考虑是不是在实例化adapter时,new ArrayAdapter的参数是空的呢?前两个参数是不会有问题的,第三个参数persons是一个ArrayList对象(Person是另外的一个类),它有没有实例化呢?通过检查发现问题果然出在这,ArrayList没有实例化。实例化之后,问题果断解决。


所以在使用ListView或者与其比较类似的GridView时,为其添加适配器如果遇到空指针异常不妨往适配器身上考虑一下,

作为一个新手,为这个问题纠结了一晚上,不得不说这是一个艰辛但是美好的过程,写这篇博文记录一下,提醒自己不要再犯这种错误了。

你可能感兴趣的:(常见错误,listview,空指针)