Android空指针问题

zilong0536 2011-11-11 05:55:07
Android解析xml获取了控件的应用,但在使用控件的时候总是报空指针异常,这种现象时有时无,以前clean一下就没问题了,现在clean了也没有用,不知道有遇上这样的问题的没,还请指教这种现象的原因及解决办法。
...全文
861 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrZhu2 2014-07-30
  • 打赏
  • 举报
回复
引用 8 楼 Jingmy 的回复:
你是在setContentView(R.layout.main)之前还是之后获取控件的,如果是在之前,会出现这样的问题
Jingmy 解决我的问题了,我的问题就是这样,在setOnClock的时候报空指针,原来我是在setContentView之前在操作控件,太感谢了,新手规则不知道~~~~O(∩_∩)O哈哈~,好开心!!
hyy_hyy 2013-11-20
  • 打赏
  • 举报
回复
楼主解决了没?我也出现了一样的问题
zilong0536 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 weixuejun891229 的回复:]
你的这个button跟你的这个布局是分开的,意思就是你的main.xml里没有button,但这个button在其他布局里面。不赋值会正常显示,所以你赋值的时候会出现空指针异常
[/Quote]
基本上就是你说的这个错误,非常感谢你。
我用LayoutInflater加载了一个布局,而我的Button就是在这个布局中的,而不是我的Activity中加载的那个布局。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_inflater_demo);

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.defined_dialog, null);
testButton = (Button) view.findViewById(R.id.definedDialog_test_button_id);
testButton.setOnClickListener(this);
}
之前将testButton = (Button) view.findViewById(R.id.definedDialog_test_button_id);
写成testButton = (Button) this.findViewById(R.id.definedDialog_test_button_id);所以出错了。
rocky225 2011-11-14
  • 打赏
  • 举报
回复
可能是你的xml有问题 看下R.java里面有没这个ID
zilong0536 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mahaiyun18 的回复:]
里面没有参数?
[/Quote]
那是略写的button.setText("aaaaaaaaaaaaaaaaaaaaa")
mahaiyun18 2011-11-14
  • 打赏
  • 举报
回复
里面没有参数?
zilong0536 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jingmy 的回复:]
你是在setContentView(R.layout.main)之前还是之后获取控件的,如果是在之前,会出现这样的问题
[/Quote]
当然是之后了
简单的说就是先findViewById获取引用,然后用,出错,说null。
例如:
setContentView(R.layout.main)
Button button = (Button)this.findViewById(R.id.buttonId)
button.setText()等等
出错
这行button.setText()报错,说空。是button空。
Jingmy 2011-11-14
  • 打赏
  • 举报
回复
你是在setContentView(R.layout.main)之前还是之后获取控件的,如果是在之前,会出现这样的问题
A一剑飞鸿 2011-11-14
  • 打赏
  • 举报
回复
设置断点 测试一下!
zilong0536 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cdbdyx 的回复:]
好像android就是这么做的,内存不够时就释放一些weak的变量,所以你要自己在自己的应用里面做好这个处理,比如oncreate和onresume的时候都判断一下,如果是空就再分配
[/Quote]
你们的回答都挺有道理的,在此先谢谢各位了。
我每次都会执行onCreate方法(意思是在onCreate中就出异常了),获取控件的引用是通过findViewById方法,只是获取不到,为什么呢?
xml中应经+id了,编译也通过了,但是在运行的时候就报这个控件为空的异常了,难道是因为内存不够,直接没给分配上内存?
Simple魏 2011-11-14
  • 打赏
  • 举报
回复
你的这个button跟你的这个布局是分开的,意思就是你的main.xml里没有button,但这个button在其他布局里面。不赋值会正常显示,所以你赋值的时候会出现空指针异常
zilong0536 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 rocky225 的回复:]
可能是你的xml有问题 看下R.java里面有没这个ID
[/Quote]
id有啊,我看了,再说要是没有的话,也肯定编译不通过,整个Activity就这一个Button。
franzhong 2011-11-14
  • 打赏
  • 举报
回复
肯定ID没找到吧,进R.java搜一下看看
ucasliming 2011-11-14
  • 打赏
  • 举报
回复
不会吧,这样写应该没什么问题的啊。你是不是在Button button = (Button)this.findViewById(R.id.buttonId)之后又定义了一个Button,导致用后面的button时报空指针错误,如果不是的话只有再查看一下R文件,看看是不是有这个Id。----个人之见。
guonanyun 2011-11-13
  • 打赏
  • 举报
回复
贴出log信息看一下是哪个对象为空,然后在相应的代码前加非空判断,差不多就可以了吧
毛豆先生Max 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cdbdyx 的回复:]
好像android就是这么做的,内存不够时就释放一些weak的变量,所以你要自己在自己的应用里面做好这个处理,比如oncreate和onresume的时候都判断一下,如果是空就再分配
[/Quote]
+1
飞翔流星 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fengli3863 的回复:]
引用 2 楼 cdbdyx 的回复:
好像android就是这么做的,内存不够时就释放一些weak的变量,所以你要自己在自己的应用里面做好这个处理,比如oncreate和onresume的时候都判断一下,如果是空就再分配

+1
[/Quote]
+1 oncreate的时候不需要判断,直接得到了
因为如果进行oncreate的话,那这个Activity都已经不存在了
充电宝111 2011-11-11
  • 打赏
  • 举报
回复
好像android就是这么做的,内存不够时就释放一些weak的变量,所以你要自己在自己的应用里面做好这个处理,比如oncreate和onresume的时候都判断一下,如果是空就再分配
lint87 2011-11-11
  • 打赏
  • 举报
回复
木有初始化吧?

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧