2011-09-19 67 views
3

我的工作代碼Android的 - 局部變量TST可能沒有被初始化

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

    } 

爲什麼不工作,我的代碼?

請幫忙。

問候

回答

6

如果(item.getItemId() == R.id.menuVada)怎麼辦?

只需初始化tstnull。然後檢查是否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; 

    } 
+0

謝謝,你的代碼工作 – Chicharito

+0

這可以通過將聲明,.setGravity和.show移動到else子句來清理一下。 –

+0

@Mike dg:這樣做會改變代碼的邏輯! –

0

你必須在使用前初始化的變量。試試這個:

Toast tst = null; 

但你得到一個空引用異常如果代碼採取else分支。所以,從某種意義上說,你仍然可以說代碼不起作用......它只是編譯而已。

0

因爲如果您的if()測試爲真,它將進​​入註釋掉tst分配的空分支。因此,當您訪問tst.setGravity()時,tst未初始化。

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

編輯accordind發表評論。

+0

錯誤:「tst無法解決」 – Chicharito

+0

這似乎有點破了我...什麼tst.show()呢? – vmatyi

+0

我編輯了我的帖子,thx糾正我。我的觀點只是你不需要做一個Toast tst。 – mthpvg

1

您的變量Toast tst;應在 ifelse條件下初始化。

因爲如果你發現你的if()條件true那麼else部分將永遠不會被調用。 和應用程序流程將繼續到下一個和 將導致NullPointerException

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的方式。

0

我想你應該讓靜態像

Static tst; 

或使其尖沙咀存儲在另一個變量,然後進入您的類麪包一樣

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

希望它會工作