Android - 本地变量tst可能尚未初始化

时间:2011-09-19 14:20:37

标签: android

我的工作代码是

@Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) 
    {
        Toast tst;

        if (item.getItemId() == R.id.menuVada) {
            tst = Toast.makeText(Main.this, " Vada ", 2000);

        } else {
            tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
                    + " Menu ID: " + item.getItemId(), 2000);
        }
        tst.setGravity(Gravity.CENTER, 0, 0);
        tst.show();

        return true;

    }

但此代码不起作用

@Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) 
    {
        Toast tst;

        if (item.getItemId() == R.id.menuVada) {
            //tst = Toast.makeText(Main.this, " Vada ", 2000);

        } else {
            tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
                    + " Menu ID: " + item.getItemId(), 2000);
        }
        tst.setGravity(Gravity.CENTER, 0, 0);
        tst.show();

        return true;

    }

为什么不使用我的代码?

请帮忙。

最好的问候

7 个答案:

答案 0 :(得分:6)

如果(item.getItemId() == R.id.menuVada)怎么办?

只需将tst初始化为null即可。然后检查tst!=null是否显示吐司

@Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) 
    {
        Toast tst = null;

        if (item.getItemId() == R.id.menuVada) {
            //tst = Toast.makeText(Main.this, " Vada ", 2000);

        } else {
            tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
                    + " Menu ID: " + item.getItemId(), 2000);
        }
        if(tst!=null){
            tst.setGravity(Gravity.CENTER, 0, 0);
            tst.show();
        }

        return true;

    }

答案 1 :(得分:1)

您的变量Toast tst;应该在两者中初始化 ifelse条件。

因为如果您发现if()条件true,则永远不会调用else部分。 并且应用程序流程将进入下一个和 将导致NullPointerException

答案 2 :(得分:1)

是的,在if分支中,tst未初始化。但是如果你只在一个分支中显示Toast,我也会将声明,重力和显示行放在该分支中。

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) 
{

    if (item.getItemId() == R.id.menuVada) {

    } else {
        Toast tst = Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
                + " Menu ID: " + item.getItemId(), 2000);
        tst.setGravity(Gravity.CENTER, 0, 0);
        tst.show();
    }

    return true;

}

否则采取Serif的方式。

答案 3 :(得分:0)

您必须在使用之前初始化变量。试试这个:

Toast tst = null;

但是如果代码采用else分支,获取空引用异常。所以,在某种程度上,你仍然可以说代码不起作用......它只是编译。

答案 4 :(得分:0)

因为如果您的if()测试为真,它将进​​入空分支,其中tst的分配已被注释掉。因此,当您到达tst时,tst.setGravity()未初始化。

答案 5 :(得分:0)

我认为你应该让它像静态一样

Static  tst;

或者让它将tst存储在另一个变量中,然后访问你的类Toast,如

Toast  t = new Toast();
t.tst = // your variable

希望它能运作

答案 6 :(得分:-1)

您可以尝试:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) 
{
    if (item.getItemId() == R.id.menuVada) {
        Toast.makeText(Main.this, " Vada ", 2000);

    } else {
        Toast.makeText(Main.this, "Menu Title: " + item.getTitle()
                + " Menu ID: " + item.getItemId(), 2000);
    }
    return true;
}

根据评论编辑。