Я работал над приложением и добавил меню опций.До добавления меню все работало нормально, но после добавления оно не запустится, процесс просто останавливается.Я попытался удалить меню, и это не сработало, оно все еще останавливается.В logcat говорится, что есть исключение нулевого указателя, но я не могу понять, почему это происходит.
мой xml-файл numbers_menu:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/quit"
android:title="@string/quit_str" ></item>
<item android:id="@+id/instructions"
android:title="@string/instructions_str"></item>
</menu>
методы:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.numbers_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.quit:
quit();
return true;
case R.id.instructions:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Вот код, приводящий к исключению нулевого указателя:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
play_game();
}
public void play_game() {
//get some numbers
rolled1 = roll();
Log.d(TAG, "rolled1 is up");
rolled2 = roll();
Log.d(TAG, "rolled2 is up");
switch(rolled1) {
case 1:
rolled_id_1 = 2131034114;
break;
case 2:
rolled_id_1 = 2131034115;
break;
case 3:
rolled_id_1 = 2131034116;
break;
case 4:
rolled_id_1 = 2131034117;
break;
case 5:
rolled_id_1 = 2131034119;
break;
case 6:
rolled_id_1 = 2131034120;
break;
}
Log.d(TAG, "rolled_id_1 is up with the value " + Integer.toString(rolled_id_1));
switch(rolled2) {
case 1:
rolled_id_2 = 2131034114;
break;
case 2:
rolled_id_2 = 2131034115;
break;
case 3:
rolled_id_2 = 2131034116;
break;
case 4:
rolled_id_2 = 2131034117;
break;
case 5:
rolled_id_2 = 2131034119;
break;
case 6:
rolled_id_2 = 2131034120;
break;
}
Log.d(TAG, "rolled_id_2 is up with the value " + Integer.toString(rolled_id_2));
switch(rolled1 + rolled2) {
case 1:
rolled_sum = 2131034114;
break;
case 2:
rolled_sum = 2131034115;
break;
case 3:
rolled_sum = 2131034116;
break;
case 4:
rolled_sum = 2131034117;
break;
case 5:
rolled_sum = 2131034119;
break;
case 6:
rolled_sum = 2131034120;
break;
case 7:
rolled_sum = 2131034121;
break;
case 8:
rolled_sum = 2131034122;
break;
case 9:
rolled_sum = 2131034124;
break;
case 10:
rolled_sum = 2131034125;
break;
case 11:
rolled_sum = 2131034126;
break;
case 12:
rolled_sum = 2131034127;
break;
}
Log.d(TAG, "rolled_id_sum is up with the value " + Integer.toString(rolled_sum));
if(lose(rolled_id_1, rolled_id_2, rolled_sum)) {
dieShow(rolled1, rolled2);
setContentView(R.layout.main);
play_game();
}
else {
disable_flag = 0;
needDisable(rolled_id_1, rolled_id_2);
dieShow(rolled1, rolled2);
}
}
public boolean lose(int rolled_id_1, int rolled_id_2, int rolled_sum) {
//check loss
Button button_check_loss_1 = (Button)findViewById(rolled_id_1);
Log.d(TAG, "getting past first button assignment");
Button button_check_loss_2 = (Button)findViewById(rolled_id_2);
Log.d(TAG, "getting past second button assignment");
Button button_check_loss_3 = (Button)findViewById(rolled_sum);
Log.d(TAG, "getting past third button assignment");
if((!button_check_loss_1.isClickable() || !button_check_loss_2.isClickable()) && !button_check_loss_3.isClickable()) {
Toast loseText = Toast.makeText(this, "you lose1", Toast.LENGTH_LONG);
loseText.show();
return true;
}
if(!button_check_loss_1.isClickable() && !button_check_loss_2.isClickable() && !button_check_loss_3.isClickable()) {
Toast loseText = Toast.makeText(this, "you lose2", Toast.LENGTH_LONG);
loseText.show();
return true;
}
if(rolled_id_1 == rolled_id_2) {
if ((!button_check_loss_1.isClickable() || !button_check_loss_2.isClickable()) && !button_check_loss_3.isClickable()) {
Toast loseText = Toast.makeText(this, "you lose3", Toast.LENGTH_LONG);
loseText.show();
return true;
}
}
return false;
}
Ошибка происходит по адресу:
if((!button_check_loss_1.isClickable() || !button_check_loss_2.isClickable()) && !button_check_loss_3.isClickable())