在使用list做东西的时候出现空指针,查了半天资料

本来是这样的

List<Restaurant> model;LunchListAdapter adapter;//这是我重写的适配器@Overrideprotected 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;//这是我重写的适配器@Overrideprotected 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的初始化还是有些讲究的.

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都可以.

当然这样在存取时候是要进行类型转换的,效率会低一些.

还有,关于空指针错误真的是很困扰人的一件事情,所以最好的解决方式就是在使用前 一定要保证完成正确的初始化.

更多相关文章

  1. Android(安卓)WebView 禁止输入
  2. android虚席总结(16.08.26)Activity的生命周期
  3. 疯狂android讲义---Configuration
  4. Android(安卓)实现微信,微博,微信朋友圈,QQ分享的功能
  5. MediaScanner源码分析
  6. SDL2库(4)-Android(安卓)端源码简要分析(AudioSubSystem)
  7. 【Android(安卓)基础】 ListView 部分Item不可选中
  8. android EditText设置密码明文/密文显示(亲测可用,欢迎留言)
  9. Android中OptionMenu使用

随机推荐

  1. Android中 在显示ImageView时图片上面和
  2. Android(安卓)init 详细过程分析
  3. 【转】获取android设备 id
  4. PC_android通信之传输图片并显示在手机端
  5. 友盟资深工程师徐仙明确定演讲主题:Androi
  6. Android内核详解之Low memory killer
  7. Android开发者最容易犯的几个错误
  8. android系统中log机制
  9. android第三天课程 activity生命周期
  10. 通杀所有系统的硬件漏洞?聊一聊Drammer,And