2012-03-02 111 views
0

我一直在編碼的Android應用程序,我已經開始突然得到一個錯誤,錯誤日誌中說,有Java.Lang.Null.pointer.exception於自己的比賽的第23行.java,但沒有任何關於該代碼的代碼已經改變。這是代碼:任何想法?獲得的Java郎空指針異常

主要類

public void onClick(View v) { 
    switch (v.getId()) {   
    case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
     break; 
    case R.id.ext_button: 
     finish(); 
     break; 

    case R.id.new_button: 

     openNewGameDialog(); 
     break; 
    } 
} 

private void openNewGameDialog() { 

    new AlertDialog.Builder(this) 

    .setTitle(R.string.diff_head) 

    .setItems(R.array.difficulty, 

    new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialoginterface, 
       int i) { 

      startGame(i); 

     } 
    }) 

    .show(); 
} 


private void startGame(int i) { 

    Intent intent = new Intent(this, Game.class); 

    intent.putExtra(Game.KEY_DIFFICULTY, i); 

    startActivity(intent); 
} 

Game.java

public class Game extends Activity { 

public static final String KEY_DIFFICULTY = "w1279057.CW1.difficulty"; 
public static final int DIFFICULTY_NOVICE = 0; 
public static final int DIFFICULTY_EASY = 1; 
public static final int DIFFICULTY_MEDIUM = 2; 
public static final int DIFFICULTY_GURU = 3; 




      Random rand = new Random(); 


line 23 >> int diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_NOVICE); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
+0

你能張貼堆棧跟蹤過? – 2012-03-02 19:48:34

+2

'getIntent()'必須返回一個空值,那麼當你調用'getIntExtra(..)'的空值,你得到你的例外。 – 2012-03-02 19:49:34

+2

getIntent返回null,因爲onCreate並沒有先調用....將此行移動到onCreate編輯:after super.onCreate – Selvin 2012-03-02 19:49:56

回答

0

如果這就是它的發生而行,那麼這意味着,從getIntent()返回的值是零。這就是爲什麼你總是應該避免調用方法返回方法調用的結果(參見Law of Demeter)。

要仔細檢查,看看這個活動開始。機會是那裏的麻煩。

0

您沒有上傳足夠的代碼來清除它。但是,如果我不得不猜測.. getIntent()只會從startGame()方法調用時返回非空值。如果您重新啓動活動(即方向更改),您將得到一個空指針。嘗試這樣的事情。

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState 
    int diff; 
    if(savedInstanceState == null) 
     diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_NOVICE); 
} 

,然後如果你要保存的狀態看方法onRestoreInstanceState(捆綁outstate)