为一个活动使用多个XML布局

时间:2016-01-07 02:23:14

标签: java android xml layout nullpointerexception

我正在使用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);
    }

3 个答案:

答案 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 docsthis question的更多信息。

答案 1 :(得分:1)

test为null,并引发NullPointerException。

您应该初始化该变量。

此外,当你需要检查一些带有常量的String以将常量变量放到this对象时会更好,例如更改:

if(test.equals("One"))

对此:

if("One".equals(test))

这样即使test为null也是安全的。

答案 2 :(得分:1)

您的test变量为null。为避免nullString进行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