【问题标题】:Android - The local variable tst may not have been initializedAndroid - 局部变量 tst 可能尚未初始化
【发布时间】:2011-09-19 14:20:36
【问题描述】:

我的工作代码是

@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;

    }

为什么我的代码不工作?

请帮忙。

最好的问候

【问题讨论】:

    标签: android


    【解决方案1】:

    如果(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;
    
        }
    

    【讨论】:

    • 这可以通过将声明、.setGravity 和 .show 移到 else 子句中来稍微清理一下。
    【解决方案2】:

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

    因为如果你找到你的if() 条件true 那么else 部分将永远不会被调用。 申请流程将进入下一步 会导致NullPointerException

    【讨论】:

      【解决方案3】:

      是的,在 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 的路。

      【讨论】:

        【解决方案4】:

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

        Toast tst = null;
        

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            我认为你应该把它设为静态喜欢

            Static  tst;
            

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

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

            希望能成功

            【讨论】:

              【解决方案7】:

              你可以试试:

              @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;
              }
              

              根据评论进行编辑。

              【讨论】:

              • 我编辑了我的帖子,谢谢纠正我。我的意思是你不需要 Toast tst。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-25
              相关资源
              最近更新 更多