#java #android #class
#java #Android #класс
Вопрос:
В настоящее время я создаю приложение TicTacToe, и поскольку одна из моих функций стала довольно огромной, я решил поместить ее в другой класс. Приложение работало раньше, но теперь, когда я хочу запустить приложение на своем телефоне, оно немедленно вылетает. Это ошибка, которую я получаю:
Сообщение об ошибке сбой android.os.
Исключение TransactionTooLargeException: размер посылки данных 10722432 байта
Вот мой MainActivity.java
package de.lucbe.tictactoe;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button[] buttons = new Button[9];
int turn = 0;
boolean isTurnCircle = false;
int i;
boolean gameIsRunning = true;
TextView textView;
TicTacToe ttt = new TicTacToe();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
for(i = 0;i < buttons.length; i ){
String buttonID = "button" i;
int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
buttons[i] = ((Button) findViewById(resID));
buttons[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button0:
ttt.ticTacToe(0);
break;
case R.id.button1:
ttt.ticTacToe(1);
break;
case R.id.button2:
ttt.ticTacToe(2);
break;
case R.id.button3:
ttt.ticTacToe(3);
break;
case R.id.button4:
ttt.ticTacToe(4);
break;
case R.id.button5:
ttt.ticTacToe(5);
break;
case R.id.button6:
ttt.ticTacToe(6);
break;
case R.id.button7:
ttt.ticTacToe(7);
break;
case R.id.button8:
ttt.ticTacToe(8);
break;
}
}
}
И это мой TicTacToe.java
package de.lucbe.tictactoe;
import android.widget.Button;
import android.widget.TextView;
public class TicTacToe {
MainActivity MA = new MainActivity();
boolean gameIsRunning = MA.gameIsRunning;
boolean isTurnCircle = MA.isTurnCircle;
int turn = MA.turn;
Button[] buttons = MA.buttons;
TextView textView = MA.textView;
public void ticTacToe(int id){
if(gameIsRunning){
if(turn < 9){
if(isTurnCircle){
buttons[id].setText("o");
isTurnCircle = false;
}else if(!isTurnCircle){
buttons[id].setText("x");
isTurnCircle = true;
}
turn ;
buttons[id].setEnabled(false);
}
if(buttons[0].getText() == "x" amp;amp; buttons[1].getText() == "x" amp;amp; buttons[2].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[3].getText() == "x" amp;amp; buttons[4].getText() == "x" amp;amp; buttons[5].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[6].getText() == "x" amp;amp; buttons[7].getText() == "x" amp;amp; buttons[8].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[0].getText() == "x" amp;amp; buttons[3].getText() == "x" amp;amp; buttons[6].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[1].getText() == "x" amp;amp; buttons[4].getText() == "x" amp;amp; buttons[7].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[2].getText() == "x" amp;amp; buttons[5].getText() == "x" amp;amp; buttons[8].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[0].getText() == "x" amp;amp; buttons[4].getText() == "x" amp;amp; buttons[8].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}else if(buttons[2].getText() == "x" amp;amp; buttons[4].getText() == "x" amp;amp; buttons[6].getText() == "x"){
textView.setText("x hat gewonnen");
gameIsRunning = false;
}
if(buttons[0].getText() == "o" amp;amp; buttons[1].getText() == "o" amp;amp; buttons[2].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[3].getText() == "o" amp;amp; buttons[4].getText() == "o" amp;amp; buttons[5].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[6].getText() == "o" amp;amp; buttons[7].getText() == "o" amp;amp; buttons[8].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[0].getText() == "o" amp;amp; buttons[3].getText() == "o" amp;amp; buttons[6].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[1].getText() == "o" amp;amp; buttons[4].getText() == "o" amp;amp; buttons[7].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[2].getText() == "o" amp;amp; buttons[5].getText() == "o" amp;amp; buttons[8].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[0].getText() == "o" amp;amp; buttons[4].getText() == "o" amp;amp; buttons[8].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}else if(buttons[2].getText() == "o" amp;amp; buttons[4].getText() == "o" amp;amp; buttons[6].getText() == "o"){
textView.setText("o hat gewonnen");
gameIsRunning = false;
}
if(turn == 9){
textView.setText("Game over!");
}
}
}
}
Заранее спасибо. И извините за очень длинный вопрос.
Комментарии:
1. Храните меньше данных посылки. Прочитайте это, чтобы лучше понять: developer.android.com/reference/android/os /…
2. Создайте
TicTacToe
внутренний классMainActivity
. Итак, вам не нужнаMA
переменная.3. Никогда не создавайте экземпляр действия (например,
Activity
) самостоятельно с помощью конструктора. Помимо этого, пожалуйста, отредактируйте свой вопрос и предоставьте полную трассировку стека Java, связанную с вашим сбоем.
Ответ №1:
мое первое впечатление, что проблема возникает из
MainActivity MA = new MainActivity();
это не обычный способ передачи информации из activity в класс. Это создает новый экземпляр вашей активности, и пока вы не используете статические поля в своей MainActivity, я не думаю, что это должно работать (хотя использование статических полей здесь плохая идея).
Вы должны вызвать класс TicTacToe над методами с необходимыми аргументами..
Комментарии:
1. Я исправил это сейчас. Спасибо за ваш комментарий.