Android Studio 3.1.3中的错误。java.lang.IllegalStateException:无法执行android:onClick的方法

克里什·高格(Krish Gogar)

我是Android新手。我正在创建Tic Tac Toe游戏,单击按钮再次播放时出现错误。我附上我的代码。

我想了解为什么它不起作用,所以下次我可以更好地帮助自己。游戏逻辑运行正常。当玩家获胜时,会弹出一个布局,并与玩家和“再次播放”按钮组合,当我单击该按钮上的调用onClickfunction“ PlayAgain”时,它就会崩溃。

这是My MainActivity.java代码:

package com.example.kiran.tictactoegame;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    //0 = Yellow and 1 = Red
    int activePlayer = 0 ;
    boolean gameIsActive=true;
    // 2 means block is unplayed
    int[] gameState={2,2,2,2,2,2,2,2,2};
    int [][] winningPositions={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};


    public void dropIn(View view)
    {
        ImageView counter = (ImageView) view;  //this is the tap where use tap on screen which we pass it in function
        //System.out.println(counter.getTag().toString());
        int tappedCounter = Integer.parseInt(counter.getTag().toString());

        // if statement to see if that block is already played or not and if not then place dice
        if(gameState[tappedCounter]==2 && gameIsActive) {
            counter.setTranslationY(-1000f);
            gameState[tappedCounter]=activePlayer;
           // if statement to find whose chance is it to play
            if (activePlayer == 0) {
                counter.setImageResource(R.drawable.yellow);
                activePlayer = 1;
            } else {
                counter.setImageResource(R.drawable.red);
                activePlayer = 0;
            }
            counter.animate().translationYBy(1000f).setDuration(300);
        }
        // for loop to see if someone won
        for(int[] winningPosition : winningPositions)
        {
            // we are checking if all 3 position are same (either 0 for player one or 1 for player 2) is same and not 2 (means empty)
            if (gameState[winningPosition[0]]==gameState[winningPosition[1]] &&
                    gameState[winningPosition[1]]==gameState[winningPosition[2]] &&
                    gameState[winningPosition[0]]!=2) {
                // someone won
                    gameIsActive=false;
                    String winner="Red";
                if(gameState[winningPosition[0]]==0){
                    winner="Yellow";
                }
                TextView winnerMassage = (TextView) findViewById(R.id.winnerText);
                winnerMassage.setText(winner + " Has Won!");
                LinearLayout layout = (LinearLayout) findViewById(R.id.playAgainLayout);
                layout.setVisibility(view.VISIBLE);

            }
        }
    }

    public void playAgain(View view)
    {
        Toast.makeText(MainActivity.this,"PlayAgain",Toast.LENGTH_LONG).show();
        LinearLayout layout = (LinearLayout) findViewById(R.id.playAgainLayout);
        layout.setVisibility(view.INVISIBLE);
        //0 = Yellow and 1 = Red
        activePlayer = 0 ;
        gameIsActive=true;
        // 2 means block is unplayed
        //gameState={2,2,2,2,2,2,2,2,2}; cannot get again like this so for doing it we use Loop
        for(int i=0;i<gameState.length;i++)
        {
            gameState[i]=2;
        }
        // to set all sources of dice to null
      GridLayout gridLayout= (GridLayout) findViewById(R.id.gridLayout);
       for(int i=0;i<gridLayout.getChildCount();i++)
        {
            ((ImageView) gridLayout.getChildAt(i)).setImageResource(0); // it will get all the child of grid view(which is image view and set its source to NULL
        }

    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

这是错误,我正在获取ErrorLog

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.kiran.tictactoegame, PID: 18702
                  java.lang.IllegalStateException: Could not execute method for android:onClick
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
                      at android.view.View.performClick(View.java:6597)
                      at android.view.View.performClickInternal(View.java:6574)
                      at android.view.View.access$3100(View.java:778)
                      at android.view.View$PerformClick.run(View.java:25883)
                      at android.os.Handler.handleCallback(Handler.java:873)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:6642)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Method.invoke(Native Method)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
                      at android.view.View.performClick(View.java:6597) 
                      at android.view.View.performClickInternal(View.java:6574) 
                      at android.view.View.access$3100(View.java:778) 
                      at android.view.View$PerformClick.run(View.java:25883) 
                      at android.os.Handler.handleCallback(Handler.java:873) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:193) 
                      at android.app.ActivityThread.main(ActivityThread.java:6642) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
                   Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout cannot be cast to android.widget.GridLayout
                      at com.example.kiran.tictactoegame.MainActivity.playAgain(MainActivity.java:81)
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384) 
                      at android.view.View.performClick(View.java:6597) 
                      at android.view.View.performClickInternal(View.java:6574) 
                      at android.view.View.access$3100(View.java:778) 
                      at android.view.View$PerformClick.run(View.java:25883) 
                      at android.os.Handler.handleCallback(Handler.java:873) 
                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                      at android.os.Looper.loop(Looper.java:193) 
                      at android.app.ActivityThread.main(ActivityThread.java:6642) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
I/Process: Sending signal. PID: 18702 SIG: 9
Application terminated.
阿西拉

更改

import android.widget.GridLayout;

import android.support.v7.widget.GridLayout;

因为错误显示强制转换异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章