Я все еще получаю NPE, но теперь это из моего onCreate(). Когда я удаляю кнопки, все работает нормально.Получение NPE (Отредактировано)
Вот XML (каждая таблица строк из отдельных XMLs):
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp" >
<Button
android:id="@+id/doneP1"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="Done" />
<Button
android:id="@+id/resetP1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset" />
</TableRow>
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp" >
<Button
android:id="@+id/doneP2"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:text="Done" />
<Button
android:id="@+id/resetP2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset" />
</TableRow>
Вот код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tictactoegame);
/*doneP1 = (Button) this.findViewById(R.id.doneP1);
doneP2 = (Button) this.findViewById(R.id.doneP2);
resetP1 = (Button) this.findViewById(R.id.resetP1);
resetP2 = (Button) this.findViewById(R.id.resetP2);
checkTurn(); //starts the game
//buttons
doneP1.setOnClickListener(this);
doneP2.setOnClickListener(this);
resetP1.setOnClickListener(this);
resetP2.setOnClickListener(this);*/ //commented out
}
и вне OnCreate
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.doneP1:
checkTurn();
break;
case R.id.doneP2:
checkTurn();
break;
case R.id.resetP1:
break;
case R.id.resetP2:
break;
}
}
здесь является checkturn
public void checkTurn()
{
if(turn == 1)
{
changeLayout(turn);
turn = 2;
}
else
{
changeLayout(turn);
turn = 1;
}
}
вот changelayout (EDIT: новый changeLayout, я просто инициализируется каждый кнопки внутри метода, но до сих пор никакого эффекта, я делаю это правильно?)
public void changeLayout(int turn)
{
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragment_container);
FragmentTransaction ft;
if(turn == 1) //if its player 1's turn
{
doneP1 = (Button) this.findViewById(R.id.doneP1);
resetP1 = (Button) this.findViewById(R.id.resetP1);
doneP1.setOnClickListener(this);
resetP1.setOnClickListener(this);
if(fragment == null) //checks wether the current framelayout contains a fragment or not
{
ft = fm.beginTransaction();
ft.add(R.id.fragment_container, new PlayerTurn1());
ft.commit();
//setPlayer1();
}
else
{
ft = fm.beginTransaction();
ft.replace(R.id.fragment_container, new PlayerTurn1());
ft.commit();
}
}
else
{
doneP2 = (Button) this.findViewById(R.id.doneP2);
resetP2 = (Button) this.findViewById(R.id.resetP2);
doneP2.setOnClickListener(this);
resetP2.setOnClickListener(this);
if(fragment == null)
{
ft = fm.beginTransaction();;
ft.add(R.id.fragment_container, new PlayerTurn2());
ft.commit();
//setPlayer2();
}
else
{
ft = fm.beginTransaction();;
ft.replace(R.id.fragment_container, new PlayerTurn2());
ft.commit();
}
}
}
и вот LogCat
03-24 07: 51: 55.954: E/AndroidRuntime (5092): вызвано: java.lang.NullPointerException 03-24 07: 51: 55.954: E/AndroidRuntime (5092): at As2.packageTK.TicTacToeGame .onCreate (TicTacToeGame.java:88)
линия 88 является:
doneP1.setOnClickListener(this);
Я работал над этим в течение около 4 часов, и я до сих пор не может решить простую задачу. У меня голова пускает слюни, и я действительно устал, я хочу исправить это, прежде чем я пойду спать, поэтому я буду благодарен за быстрый ответ. Я очистил и перестроил свою проблему ... ничего. Кажется, все хорошо, но нет ... NPE всегда имеет бюст в.
PLZ также добавить checkTurn(); код с вопросом –
Я добавил их. Im очень уверен, что код прав, но каждый раз, когда я удаляю код кнопок, он работает -.- – Morpheglus
@ user2203939 Можете ли вы просто проверить, что вы сохранили файл макета, очистили и перестроили проект, и все еще получаете ошибка? – Tushar