[英]Using Multiple XML Layouts for One Activity
我在 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);
}
你得到一个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);
}
test
为 null 并引发 NullPointerException。
您应该初始化该变量。
此外,当您需要检查一些带有常量的字符串以将常量变量放入this
对象时会更好,例如更改此:
if(test.equals("One"))
对此:
if("One".equals(test))
这样,即使测试为空,您也是安全的。
您的test
变量为null
。 为了避免对String
null
检查,在常量值上调用 equals 方法总是一个好主意
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.