setOnClickListener报空指针异常
来源:互联网 发布:阿里云投诉电话 编辑:程序博客网 时间:2024/05/08 10:39
1.异常提示:
2.错误原因:
先看代码:
在setListener方法中,发现报空指针异常的地方是setOnClickListener方法,刚开始的时候我百思不得其解,因为我的Button明明初始化成功,点击事件也有,为什么会在这个地方报空指针异常,后来觉得可能是布局中的button可能有问题,但是进入setContentView中的activity_main布局,发现我的Button一切正常,id是对的,该有的属性设置也都有,这就奇怪了,后来我无意中发现,原来错误的原因是R.id.btn_test指向了另外一个布局,我在代码中Crtl+鼠标左键居然是跳转到了另外一个无关的界面,但是这个界面中的一个Button的id和我activity_main界面的Button id是一样的,到这里,情况就很清晰明了了,原来之所以setOnClickListener报空指针异常的原因竟然是Button findViewById的时候指向了另一个界面的Button,当前界面的Button并没有被初始化,所以报了空指针异常;
更常见的情况是大家在写布局的时候忘了给相应布局的Button设置id,结果在findViewById的时候自然会指向其他布局,导致异常出现。
3.解决办法:
既然知道了错误原因,那么解决这个异常就很好办了,只要把这两个界面的Button设置为不相同的即可(或者给相应xml界面中的Button设置好Id),在这里要提醒大家,最好不要在app 开发中使用相同的id,免得出现一些意想不到的异常,另外,这个异常并不是经常出现,大部分情况下findViewById都会指向setContentView中的xml文件,在其中寻找相应id,只有偶尔的情况下才会出现id指向其他界面的异常。
4.一些其他可能出现的错误:有时也可能是其他的错误,例如有时写android:id="@+id\name"时也会不小心打错。因为没有为一个控件加一个id。虽然:1.@+id\btn_add 的确加了 btn_add=(一个16进制数)
2.但是,这个id并没有赋给任何插件
3.所以,你查这个id是有的,但并不代表任何View
4.所以强制转换过来那个东西根本就是错的,但是不会报错,直到为这个错误的东西加一些button应该有的属性,于是爆炸了。
2.但是,这个id并没有赋给任何插件
3.所以,你查这个id是有的,但并不代表任何View
4.所以强制转换过来那个东西根本就是错的,但是不会报错,直到为这个错误的东西加一些button应该有的属性,于是爆炸了。
所以写Android时要细心一点的,之前我就是因为这个问题错了好久。
我也是一个新手,刚学着Android没多久,很多知识都是在网上学习的,请大神们多多指教。
- setOnClickListener报空指针异常
- setOnClickListener报空指针异常
- setOnClickListener报空指针异常问题汇总
- View对象控件调用setOnclickListener空指针异常
- getActionBar()报空指针异常
- popuwindow报空指针异常
- getActionBar()报空指针异常
- getActionBar 报空指针异常
- c3p0报空指针异常
- findViewById报空指针异常
- getActionBar()报空指针异常
- List报空指针异常
- mediaController 报空指针异常 VideoView 关闭报空指针
- ConcurrentHashMap报空指针异常问题
- 自定义控件获取报空指针异常
- android getActionBar()报空指针异常
- 使用ActionBar报空指针异常
- xutils找id报空指针异常
- 协同过滤Item-based算法实现电影推荐系统
- 新生报到!!
- 如何在tomcat中部署项目
- ngrok
- Java实现POJ 1017:装箱问题
- setOnClickListener报空指针异常
- 实现顶部轮播,下部listview经典布局的两种方式
- UVA - 12174 Shuffle 滑动窗口
- hdu1166
- Java 反射API
- 87. Scramble String Leetcode Python
- eclipse更新插件plugin之后如何clean使之生效
- 网络编程 ——socket基本概念
- Filco蓝牙键盘在Win8.1/Linux双系统中应用 Win8引导Linux 蓝牙双系统配对