2012-03-02 113 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)