Ошибка Java, сбой приложения, (размер посылки = 10722432)

#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. Я исправил это сейчас. Спасибо за ваш комментарий.