大家好,又见面了,我是全栈君。
在使用list做东西的时候出现空指针,查了半天资料
本来是这样的
List<Restaurant> model;
LunchListAdapter adapter;//这是我重写的适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
adapter = new LunchListAdapter(LunchList.this, R.layout.row, model);
model = new ArrayList<Restaurant>();
.....//省略}
重点在倒数两行,本来我把List的初始化放在了onCreate里面,心想应该没有问题的,activity启动之后就会对它初始化了,后来我尝试着在第一行就初始化,结果就不报空指针异常,
后来发现,在初始化之前竟然把他当参数传了出去,结果就导致了空指针异常.
修改如下,初始化在前,使用在后:
List<Restaurant> model;
LunchListAdapter adapter;//这是我重写的适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
model = new ArrayList<Restaurant>();
adapter = new LunchListAdapter(LunchList.this, R.layout.row, model);
.....//省略}
虽然很简单,但还是要总结一下的,空指针害人太深.
对于List的初始化还是有些讲究的.
List是一个接口,这个一看文档便知,所以对它初始化不能new List,而应该使用ArrayList或者LinkList(这些实例化了List接口),
List<T> list = new ArrayList<T>();
而且,如果你确定List里面存放的数据类型,可以直接初始化为这种List,
List<String> list = new LinkedList<String>();
这样能够快速的处理,存取数据就不用再进行类型转换,直接是String就行了,
如果在初始化时是这样的,
List<Object> list = new LinkedList<Object>();
那么在存储时就能存储各种类型的数据了,int,String,Map,甚至是你自己定义的class都可以.
当然这样在存取时候是要进行类型转换的,效率会低一些.
还有,关于空指针错误真的是很困扰人的一件事情,所以最好的解决方式就是在使用前 一定要保证完成正确的初始化.
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121432.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...