我一直在编写一个Android应用程序,我突然开始收到错误,错误日志说我的Game.java第23行有Java.Lang.Null.pointer.exception但是没有关于已经改变了。这是代码:任何想法?
主要课程
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 :(得分:0)
如果这是它发生的行,那么这意味着从getIntent()
返回的值为null。这就是为什么你应该总是避免在方法调用的返回结果上调用方法(参见Law of Demeter)。
您应该仔细检查并了解此活动是如何开始的。有可能是麻烦。
答案 1 :(得分:0)
你没有上传足够的代码来说清楚..但如果我不得不猜测.. getIntent()只有在从startGame()方法调用时才返回非null值。如果您重新启动活动(即方向更改),您将获得nullpointer。尝试这样的事情。
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState
int diff;
if(savedInstanceState == null)
diff = getIntent().getIntExtra(KEY_DIFFICULTY, DIFFICULTY_NOVICE);
}
然后如果要保存状态,请查看方法onRestoreInstanceState(Bundle outstate)