2016-10-16 4 views
-1

В настоящее время я делаю приложение TicTacToe, и поскольку одна из моих функций стала довольно огромной, я решил поместить ее в другой класс. Приложение работало до этого, но теперь, когда я хочу запустить приложение на своем телефоне, он немедленно сработает. Это ошибка, которую я получаю:Ошибка Java, сбой приложений (размер пакета = 10722432)

Ошибка сообщения об аварии 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" && buttons[1].getText() == "x" && buttons[2].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[3].getText() == "x" && buttons[4].getText() == "x" && buttons[5].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[6].getText() == "x" && buttons[7].getText() == "x" && buttons[8].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[0].getText() == "x" && buttons[3].getText() == "x" && buttons[6].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[1].getText() == "x" && buttons[4].getText() == "x" && buttons[7].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[2].getText() == "x" && buttons[5].getText() == "x" && buttons[8].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[0].getText() == "x" && buttons[4].getText() == "x" && buttons[8].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[2].getText() == "x" && buttons[4].getText() == "x" && buttons[6].getText() == "x"){ 
      textView.setText("x hat gewonnen"); 
      gameIsRunning = false; 
     } 



     if(buttons[0].getText() == "o" && buttons[1].getText() == "o" && buttons[2].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[3].getText() == "o" && buttons[4].getText() == "o" && buttons[5].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[6].getText() == "o" && buttons[7].getText() == "o" && buttons[8].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[0].getText() == "o" && buttons[3].getText() == "o" && buttons[6].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[1].getText() == "o" && buttons[4].getText() == "o" && buttons[7].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[2].getText() == "o" && buttons[5].getText() == "o" && buttons[8].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[0].getText() == "o" && buttons[4].getText() == "o" && buttons[8].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     }else if(buttons[2].getText() == "o" && buttons[4].getText() == "o" && buttons[6].getText() == "o"){ 
      textView.setText("o hat gewonnen"); 
      gameIsRunning = false; 
     } 



     if(turn == 9){ 
      textView.setText("Game over!"); 
     } 

    } 

} 

}

Thx заранее , И извините за очень длинный вопрос.

+0

Не храните меньше данных о посылке. Прочтите это, чтобы лучше понять: https://developer.android.com/reference/android/os/TransactionTooLargeException.html – Srijith

+0

Сделайте 'TicTacToe' внутренним классом' MainActivity'. Поэтому вам не нужна переменная 'MA'. –

+0

** Никогда ** не создавайте экземпляр действия (например, 'Activity') самостоятельно через конструктор. Помимо этого, пожалуйста, отредактируйте свой вопрос и предоставите полную трассировку стека Java, связанную с вашим сбоем. – CommonsWare

ответ

1

мое первое впечатление, что проблема исходит от

MainActivity MA = new MainActivity(); 

это не является распространенным способом передачи информации от деятельности к классу. Это делает новый экземпляр вашей деятельности и до тех пор, пока вы не используете статические поля в своей MainActivity, я не думаю, что это должно сработать (использование статических полей - хотя и плохая идея здесь).

Вы должны назвать класс TicTacToe более сложными методами с необходимыми аргументами.

+0

Я исправил его сейчас. Спасибо за ваш комментарий. –

Смежные вопросы