Android studio parcel size error then java.lang.IllegalStateException: Could not execute method for android:onClick

Viewed 37
 public class MainActivity extends AppCompatActivity {
        /* access modifiers changed from: private */
        public int choosingUriFor;
        private int playTime;
        /* access modifiers changed from: private */
        public Uri playerURI1;
        /* access modifiers changed from: private */
        public Uri playerURI2;
        ActivityResultLauncher<String> startGallery = registerForActivityResult(new ActivityResultContracts.GetContent(), new ActivityResultCallback<Uri>() {
            /* JADX WARNING: type inference failed for: r0v0, types: [android.content.Context, edu.miami.cs.geoff.tictactoc.MainActivity] */
            public void onActivityResult(Uri resultUri) {
                if (resultUri != null) {
                    Drawable convertURIToDrawable = MainActivity.convertURIToDrawable(MainActivity.this, resultUri);
                    Drawable image = convertURIToDrawable;
                    if (convertURIToDrawable == null) {
                        return;
                    }
                    if (MainActivity.this.choosingUriFor == 1) {
                        ((Button) MainActivity.this.findViewById(R.id.player_image1)).setForeground(image);
                        Uri unused = MainActivity.this.playerURI1 = resultUri;
                        return;
                    }
                    ((Button) MainActivity.this.findViewById(R.id.player_image2)).setForeground(image);
                    Uri unused2 = MainActivity.this.playerURI2 = resultUri;
                }
            }
        });
        ActivityResultLauncher<Intent> startPlaying = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            public void onActivityResult(ActivityResult result) {
                int winner;
                RatingBar winnerBar;
                if (result.getResultCode() == -1 && (winner = result.getData().getIntExtra("edu.miami.cs.geoff.tictactoc.winner", 0)) > 0) {
                    if (winner == 1) {
                        winnerBar = (RatingBar) MainActivity.this.findViewById(R.id.player_score1);
                    } else {
                        winnerBar = (RatingBar) MainActivity.this.findViewById(R.id.player_score2);
                    }
                    winnerBar.setRating(winnerBar.getRating() + 1.0f);
                    if (winnerBar.getRating() == ((float) winnerBar.getNumStars())) {
                        MainActivity.this.findViewById(R.id.start_game_button).setVisibility(View.INVISIBLE);
                    }
                }
            }
        });
        private double startSplit = 0.5d;
    
        /* access modifiers changed from: protected */
        public void onCreate(Bundle savedInstanceState) {
            MainActivity.super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            this.playTime = getResources().getInteger(R.integer.medium_ms);
        }
    
        /* JADX WARNING: type inference failed for: r7v0, types: [android.content.Context, edu.miami.cs.geoff.tictactoc.MainActivity] */
        public void myClickHandler(View view) {
            int starter;
            switch (view.getId()) {
                case R.id.playing_image1:
                    this.choosingUriFor = 1;
                    this.startGallery.launch("image/*");
                    return;
                case R.id.playing_image2:
                    this.choosingUriFor = 2;
                    this.startGallery.launch("image/*");
                    return;
                case R.id.start_game_button:
                    Intent playActivity = new Intent(this, TicTacTocPlay.class);
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.player_name1", getPlayerName(R.id.player_name1));
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.player_image1", this.playerURI1);
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.player_name2", getPlayerName(R.id.player_name2));
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.player_image2", this.playerURI2);
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.play_time", this.playTime);
                    double random = Math.random();
                    double d = this.startSplit;
                    if (random > d) {
                        starter = 2;
                        this.startSplit = d + 0.1d;
                    } else {
                        starter = 1;
                        this.startSplit = d - 0.1d;
                    }
                    playActivity.putExtra("edu.miami.cs.geoff.tictactoc.go_first", starter);
                    this.startPlaying.launch(playActivity);
                    return;
                default:
                    return;
            }
        }
    
        private String getPlayerName(int playerId) {
            String name = ((EditText) findViewById(playerId)).getText().toString();
            if (name != null && !name.equals("")) {
                return name;
            }
            if (playerId == R.id.player_name1) {
                return getResources().getString(R.string.default_name_1);
            }
            return getResources().getString(R.string.default_name_2);
        }
    
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.score_menu, menu);
            return true;
        }
    
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.play_fast_item:
                    this.playTime = getResources().getInteger(R.integer.fast_ms);
                    return true;
                case R.id.play_medium_item:
                    this.playTime = getResources().getInteger(R.integer.medium_ms);
                    return true;
                case R.id.play_slow_item:
                    this.playTime = getResources().getInteger(R.integer.slow_ms);
                    return true;
                case R.id.play_flash_item:
                    this.playTime = getResources().getInteger(R.integer.flash_ms);
                    return true;
                case R.id.reset_item:
                    ((RatingBar) findViewById(R.id.player_score1)).setRating(0.0f);
                    ((RatingBar) findViewById(R.id.player_score2)).setRating(0.0f);
                    findViewById(R.id.start_game_button).setVisibility(View.VISIBLE);
                    return true;
                default:
                    return MainActivity.super.onOptionsItemSelected(item);
            }
        }
    
        public static Drawable convertURIToDrawable(Context context, Uri myURI) {
            try {
                return Drawable.createFromStream(context.getContentResolver().openInputStream(myURI), myURI.toString());
            } catch (Exception e) {
                return null;
            }
        }
    }

Above is the MainActivity in AndroidStudio. I got parcel size error first now I got On click error while trying to debug. I'm so lost. I assume the error is in the TicTacTocPLay class especially in the runnable and run method. But i still havent been able to pinpoint the error. So, in the main method there is a play button which should direct to the second activity which is the TicTacTocPlay class. In the emulator the app crashes when I press play.

public class TicTacTocPlay extends AppCompatActivity {
    private int[][] board = ((int[][]) Array.newInstance(int.class, new int[]{3, 3}));
    /* access modifiers changed from: private */
    public Handler myHandler = new Handler();
    /* access modifiers changed from: private */
    public final Runnable myProgresser = new Runnable() {
        private int whoseTurnLast = 0;

        public void run() {
            if (this.whoseTurnLast != TicTacTocPlay.this.whoseTurn) {
                TicTacTocPlay.this.myHandler.removeCallbacks(TicTacTocPlay.this.myProgresser);
                TicTacTocPlay.this.playTimer.setProgress(TicTacTocPlay.this.playTime);
                this.whoseTurnLast = TicTacTocPlay.this.whoseTurn;
            } else {
                TicTacTocPlay.this.playTimer.setProgress(TicTacTocPlay.this.playTimer.getProgress() - TicTacTocPlay.this.playClickTime);
            }
            if (TicTacTocPlay.this.playTimer.getProgress() == 0) {
                TicTacTocPlay ticTacTocPlay = TicTacTocPlay.this;
                int unused = ticTacTocPlay.whoseTurn = (ticTacTocPlay.whoseTurn % 2) + 1;
                TicTacTocPlay.this.startPlayer();
            } else if (!TicTacTocPlay.this.myHandler.postDelayed(TicTacTocPlay.this.myProgresser, (long) TicTacTocPlay.this.playClickTime)) {
                Log.e("ERROR", "Cannot postDelayed");
            }
        }
    };
    private int numberOfPlays;
    /* access modifiers changed from: private */
    public int playClickTime;
    /* access modifiers changed from: private */
    public int playTime;
    /* access modifiers changed from: private */
    public ProgressBar playTimer;
    private Drawable[] playerImages = new Drawable[2];
    private String[] playerNames = new String[2];
    /* access modifiers changed from: private */
    public int whoseTurn;

    /* access modifiers changed from: protected */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tic_tac_toc_play);
        initializeGame(getIntent());
        startPlayer();
    }

    /* JADX WARNING: type inference failed for: r4v0, types: [android.content.Context, edu.miami.cs.geoff.tictactoc.TicTacTocPlay] */
    private void initializeGame(Intent dataFromLaunch) {
        this.playerNames[0] = dataFromLaunch.getStringExtra("edu.miami.cs.geoff.tictactoc.player_name1");
        this.playerNames[1] = dataFromLaunch.getStringExtra("edu.miami.cs.geoff.tictactoc.player_name2");
        this.playerImages[0] = MainActivity.convertURIToDrawable(this, (Uri) dataFromLaunch.getParcelableExtra("edu.miami.cs.geoff.tictactoc.player_image1"));
        this.playerImages[1] = MainActivity.convertURIToDrawable(this, (Uri) dataFromLaunch.getParcelableExtra("edu.miami.cs.geoff.tictactoc.player_image2"));
        setButton(R.id.playing_image1, 1);
        setButton(R.id.playing_image2, 2);
        this.whoseTurn = dataFromLaunch.getIntExtra("edu.miami.cs.geoff.tictactoc.go_first", 0);
        int intExtra = dataFromLaunch.getIntExtra("edu.miami.cs.geoff.tictactoc.play_time", 0);
        this.playTime = intExtra;
        this.playClickTime = intExtra / 20;
        ProgressBar progressBar = (ProgressBar) findViewById(R.id.play_time);
        this.playTimer = progressBar;
        progressBar.setMax(this.playTime);
        this.numberOfPlays = 0;
    }

    /* access modifiers changed from: private */
    public void startPlayer() {
        Button watcherButton;
        Button playerButton;
        if (this.whoseTurn == 1) {
            playerButton = (Button) findViewById(R.id.playing_image1);
            watcherButton = (Button) findViewById(R.id.playing_image2);
        } else {
            playerButton = (Button) findViewById(R.id.playing_image2);
            watcherButton = (Button) findViewById(R.id.playing_image1);
        }
        playerButton.setVisibility(View.VISIBLE);
        watcherButton.setVisibility(View.INVISIBLE);
        ((TextView) findViewById(R.id.player_name)).setText(this.playerNames[this.whoseTurn - 1]);
        this.myProgresser.run();
    }

    public void myClickHandler(View view) {
        switch (view.getId()) {
            case R.id.Button00:
                setButtonAndPlay(0, 0, view.getId());
                return;
            case R.id.Button01:
                setButtonAndPlay(0, 1, view.getId());
                return;
            case R.id.Button02:
                setButtonAndPlay(0, 2, view.getId());
                return;
            case R.id.Button10:
                setButtonAndPlay(1, 0, view.getId());
                return;
            case R.id.Button11:
                setButtonAndPlay(1, 1, view.getId());
                return;
            case R.id.Button12:
                setButtonAndPlay(1, 2, view.getId());
                return;
            case R.id.Button20:
                setButtonAndPlay(2, 0, view.getId());
                return;
            case R.id.Button21:
                setButtonAndPlay(2, 1, view.getId());
                return;
            case R.id.Button22:
                setButtonAndPlay(2, 2, view.getId());
                return;
            default:
                return;
        }
    }

    /* access modifiers changed from: package-private */
    public void setButtonAndPlay(int row, int column, int playedButtonId) {
        if (this.board[row][column] == 0) {
            this.numberOfPlays++;
            setButton(playedButtonId, this.whoseTurn);
            this.board[row][column] = this.whoseTurn;
            if (!endOfGame(row, column)) {
                this.whoseTurn = (this.whoseTurn % 2) + 1;
                startPlayer();
            }
        }
    }

    private void setButton(int buttonId, int playerIndex) {
        Log.i("DEBUG", "Setting button for player " + playerIndex);
        if (this.playerImages[playerIndex - 1] != null) {
            Log.i("DEBUG", "Setting button for player " + playerIndex + " to an image");
            findViewById(buttonId).setForeground(this.playerImages[playerIndex + -1]);
        } else if (playerIndex == 1) {
            Log.i("DEBUG", "Setting button for player 1 to RED");
            findViewById(buttonId).setForeground(ResourcesCompat.getDrawable(getResources(), R.drawable.red_button, (Resources.Theme) null));
        } else {
            Log.i("DEBUG", "Setting button for player 2 to GREEN");
            findViewById(buttonId).setForeground(ResourcesCompat.getDrawable(getResources(), R.drawable.green_button, (Resources.Theme) null));
        }
    }

    private boolean endOfGame(int row, int column) {
        int winner;
        int antiDiagonalWin = 0;
        int diagonalWin = 0;
        int columnWin = 0;
        int rowWin = 0;
        for (int index = 0; index < 3; index++) {
            int[][] iArr = this.board;
            int i = iArr[row][index];
            int i2 = this.whoseTurn;
            if (i == i2) {
                rowWin++;
            }
            if (iArr[index][column] == i2) {
                columnWin++;
            }
            if (iArr[index][index] == i2) {
                diagonalWin++;
            }
            if (iArr[index][2 - index] == i2) {
                antiDiagonalWin++;
            }
        }
        if (rowWin == 3 || columnWin == 3 || diagonalWin == 3 || antiDiagonalWin == 3) {
            winner = this.whoseTurn;
        } else if (this.numberOfPlays == 9) {
            winner = 0;
        } else {
            winner = -1;
        }
        if (winner < 0) {
            return false;
        }
        Intent returnIntent = new Intent();
        returnIntent.putExtra("edu.miami.cs.geoff.tictactoc.winner", winner);
        setResult(-1, returnIntent);
        finish();
        return true;
    }

    /* access modifiers changed from: protected */
    public void onDestroy() {
        TicTacTocPlay.super.onDestroy();
        this.myHandler.removeCallbacks(this.myProgresser);
    }
}
0 Answers
Related