我正在使用2 **获得NullPointerException
,有人可以向我解释为什么会发生这种情况吗?我也尝试过使用switch/case
语句而没有运气。
String test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
**if(test.equals("One")) {**
setContentView(R.layout.activity_one);
} else if(test.equals("Two")){
setContentView(R.layout.activity_two);
} else {
setContentView(R.layout.activity_main);
}
答案 0 :(得分:1)
您收到NPE
因为String test
从未初始化,所以它实际上是null
。
在**的行上,你试图在null
引用上调用方法。
if(test.equals("One")) { // Will generate NPE
setContentView(R.layout.activity_one);
} else if(test.equals("Two")){ // Will generate NPE
setContentView(R.layout.activity_two);
} else {
setContentView(R.layout.activity_main);
}
您必须初始化变量。作为一种好的做法,您可以随时查看null
,例如:
if (test != null) {
// do something.
}
就像在其他答案中所说的那样,你可以比较像:
这样的文字"one".equals(test);
建议不要使用“魔术数字”和“魔术字符串”。在您的类上声明这些文字,例如:
private static final String STR_ONE = "One";
private static final String STR_TWO = "Two";
然后,在if/else
上进行比较,如下所示:
if (STR_ONE.equals(test)) {
setContentView(R.layout.activity_one);
} else if (STR_TWO.equals(test)) {
setContentView(R.layout.activity_two);
} else {
setContentView(R.layout.activity_main);
}
有关NullPointerException
here on the docs和this question的更多信息。
答案 1 :(得分:1)
test
为null,并引发NullPointerException。
您应该初始化该变量。
此外,当你需要检查一些带有常量的String以将常量变量放到this
对象时会更好,例如更改:
if(test.equals("One"))
对此:
if("One".equals(test))
这样即使test为null也是安全的。
答案 2 :(得分:1)
您的test
变量为null
。为避免null
对String
进行if("One".equals(test)) {
setContentView(R.layout.activity_one);
} else if("Two".equals(test)){
setContentView(R.layout.activity_two);
} else {
setContentView(R.layout.activity_main);
}
检查,最好让等号方法调用常量值
sun