setOnClickListener报空指针异常问题汇总

很多刚学安卓的朋友在调试程序的时候,都有可能遇到初始化控制之后,设置事件监听器的时候,程序崩掉,报错信息显示空指针异常,因此我结合了一下自己遇到的实际情况,和网上其他人的解决方案对此类问题做了一个汇总,希望可以对同样出现同样问题的朋友带来帮助。

首先,也是我们必须要核实的一点就是你所初始化的空间是否为空,举个例子:

submit = (Button)findViewById(R.id.btn_submit_user_info);

submit.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {


}
});

或者:

submit = (Button)findViewById(R.id.btn_submit_user_info);

submit.setOnClickListener(this)


当我第一行初始化submit这个按钮的时候,接下来设置控件的监听器,这样的顺序不能反,这个大家都很容易理解要得先有(初始化)这个控件,才能对其进行操作,因此第一步先要核实这样的顺序是否准确。

接下来我们可以在初始化控件之后在后台打印输出一下,看看我们所初始化的控件到底是什么鬼

submit = (Button)findViewById(R.id.btn_submit_user_info);

System.out.println("submit is :"+submit);

这是个很有意思的环节,你可能遇到两种情况,第一种情况是打印输出的结果是空的(null),这就说明你初始化的控件在当前xml文件是找不到的,另外一种情况是打印输出有结果,一般都是:android.widget.控件类型{一堆无序码(类似id,可唯一标识控件)}。

针对第一种情况,我们都知道控件是在layout中的xml文件中定义的,因此第一步我们要检查初始化控件是在初始化布局文件(setContentView(R.layout....))之前还是之后,R文件会自动保存我们在XML文件做的一切初始化操作,因此你即使没有初始化布局,也可以在R文件里找到所有控件,这本身并没有语法错误,因此系统不会报错,但并不符合我们的操作逻辑,所以系统在初始化布局文件之前所找到的控件都是默认为空的,当然咯,这个大家也要理解,你要人家去“陌陌”上勾搭妹子,总得先下个“陌陌”吧~如果确认你的顺序是没有问题的,就必须要检查下你的空间是否在当前的布局文件下初始化的,这个我们很容易理解,一个Activity中很有可能要用到两个或两个以上的布局文件,因此你要确保你是否在一个Activity中初始化了你控件所在的那个布局文件,如果有,则应该核实下初始化控件的时候是否在改布局下初始化的。

针对第二种情况就好办了,你直接Ctril+点击该布局文件的id,查看你所初始化的控件是不是在你相应的布局文件里,因为项目一大,很可能设置了相同id的控件,一般来说这是第二类问题的关键解决方案。

以上是目前为止我总结的网上一些朋友和我遇到的一些关于setOnClickListener报空指针异常问题汇总,本人也是菜鸟一枚,如果有什么说的不对的也欢迎大家积极指出,如果你有关于setOnClickListener报空指针异常的问题是以上方法解决不了的,欢迎留言,我们一起完善此类问题的汇总。

下面送上汇总图一枚:

setOnClickListener报空指针异常问题汇总_第1张图片

希望能帮到大家,谢谢~

你可能感兴趣的:(android开发类)