空指针该如何预防?

public void onClick(View v) {
switch (v.getId()) {
case R.id.Text1:
case R.id.bn1: {
..
break;
}
case R.id.Text2:
case R.id.bn2: {
..
break;
}
case R.id.Text3:
case R.id.bn3: {
..
break;
}
case R.id.Text4:
case R.id.bn4: {
..
break;
}
default:
break;
}

}
这样写会出现空指针,我该如何修改呢?

你得试着去找错误啊 你的之言片语 我们很难帮你找到问题的所在
你看看做if(v != null && v.getId() != 0)的时候是否此View对象真的为空?
如果没空它就不会走到if语句块中去,那么同样不可能去循环遍历了。只能是外面的代码有问题
你把你改完的代码贴出来 看看你是怎么写的。

public void onClick(View v) {

if (v != null && v.getId() != null) {

switch (v.getId()) {
case R.id.Text1:
case R.id.bn1: {
..
break;
}
case R.id.Text2:
case R.id.bn2: {
..
break;
}
case R.id.Text3:
case R.id.bn3: {
..
break;
}
case R.id.Text4:
case R.id.bn4: {
..
break;
}
default:
break;
}

}

}

case R.id.Text1:
后面要有个break;

空指针应该在v.getId()这里,v == null

一般来说,NPE(空指针)是程序员的问题,避免这种问题的话,一般来说是用javadoc来约束的,下面的例子是告诉调用者,如果view是null,会有IllegalArguemntException的异常

[code="java"]
/**

  • @param View - 这是干什么的,View不能够为null
  • @throws IllegalArgumentException - if the {@code v} is null */

public void onClick(View v) {
if(v == null) {
throw new IllegalArguemntExeception("the view should not be null");
}
}[/code]

[code="java"]public void onClick(View v) {
switch (v.getId()) {
case R.id.Text1:
case R.id.bn1: { [/code]
这种报空指针的 一般都是你的对象为null 而去调用空对象的属性造成的
很显然你的View 在布局文件中配置完后 调用onClick的时候 没有正确的把View对象传过来
看问题要找本质

写上if( v != null && v.getId() != null)就是个代码习惯 以防范不必要的错误

[code="java"]
public void onClick(View v) {

if (v != null && v.getId() != null) {

switch (v.getId()) {
// ......
}
}

}
[/code]

这个只是一个示范

你看看异常log,就知道哪个地方有null point了

我上面说的是一种写法上的 只是给你一个借鉴的
你的v.getId() 是什么类型的? id 一般都是int类型的吧 那么你可以去判断为Null吗?应该是v.getId() != 0
你应该自己学着思考啊

如此看来,应该是 R 为 null 或者 R.id 为 null 了.

[quote]如果是在
case R.id.Text2:
case R.id.bn2
出现空指针 该怎么改~~~[/quote]
[code="java"]public void onClick(View v) {

if (v != null && R != null && R.id != null) {

switch (v.getId()) {

// ......

}

}

} [/code]

我一直以为

R.id.Text2 是常量或者enum,这个还能报NPE的话,我真的很无语

如果是在
case R.id.Text2:
case R.id.bn2
有错误的 那就说明你的布局文件中没有对应的控件id 但我想你的这个不可能是这个的问题
如果是R.id.Text报错了 直接在eclipse中编译就不能通过的。

[quote]不能这么写吧????[/quote]

你得给出R和R.id是什么呀? 这样写只能是不会出现空指针,逻辑应该不是你想要的。

你这个是JS把??还是JAVA?

[quote]这样写根本就有错啊 R就是R.java文件啊[/quote]

那应该是R.id为null,把R.java贴出来看看。

[quote]我看了一下log 它所指的行就是在
case R.id.Text2:
case R.id.bn2
。。 [/quote]
你说你的R.id.Text2报错 那你可真把我虎住了
我记得在eclipse中如果你的布局文件中没有定义好Text2这个控件的话 在R.java中根本不可能有Text2的id 然后你在R.id.Text2 根本找不到 编译都不会通过的

[quote]
这些控件都是没问题的,就是在多次点击的时候就会出现这种空指针~~~不知道问题出在什么地方?[/quote]

空间,点击,这是java么?

这问答的分,我要不起啊

[quote]空间,点击,这是java么?

这问答的分,我要不起啊[/quote]
这位兄台 听说过android么? 你好像不懂 那就不要乱嚷嚷了。

你的控件没问题 那还是处在你处理的onclick问题上 [b]你把你改完的onclick代码都拿出来[/b],
你这么说太片面了 说的太少 太模糊了
报错的问题原因都帮你分析了 然后还错 一会帮你的人都蒙了

哦,不好意思,没看到是android分类。

此外,口气不要太嚣张

唉 你看吧 你说的位置都不是原因的所在 白忙活了吧
下回一定要真正找到位置啊