启动单击活动时Android应用程序崩溃

启动单击活动时Android应用程序崩溃,android,Android,我想做个抽签游戏。当我点击其中一个框时,我得到了以下错误,最初,它工作了,但是当我开始开发它时,它突然停止了工作。如何调试此错误 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.tres_en_ralla, PID: 3943 java.lang.IllegalStateException: Could not find method toque(View) in a parent or ancestor

我想做个抽签游戏。当我点击其中一个框时,我得到了以下错误,最初,它工作了,但是当我开始开发它时,它突然停止了工作。如何调试此错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.tres_en_ralla, PID: 3943
    java.lang.IllegalStateException: Could not find method toque(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatImageView with id 'b2'
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:436)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:393)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)


我的主要活动是:

package com.example.tres_en_ralla;

import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.view.Gravity;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private int jugadores;
    private Partida partida;
    private int [] casillas;


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

        // Iniciamos el array casillas que identifica cada casilla, y la almacena.

        casillas = new int[9];

        casillas[0] = R.id.a1;
        casillas[1] = R.id.a2;
        casillas[2] = R.id.a3;
        casillas[3] = R.id.b1;
        casillas[4] = R.id.b2;
        casillas[5] = R.id.b3;
        casillas[6] = R.id.c1;
        casillas[7] = R.id.c2;
        casillas[8] = R.id.c3;

    }
    //rescata los datos e inactiva los botones.
    public void aJugar(View vista){

        ImageView imagen;

        //Limpiamos las casillas.
        for (int c:casillas) {
            imagen = (ImageView) findViewById((c));
            imagen.setImageResource(R.drawable.casilla);
        }
        jugadores = 1;

        if(vista.getId()==R.id.dosJug) {

            jugadores = 2;
        }
        RadioGroup botones = findViewById(R.id.rdgDificultad);

        int id = botones.getCheckedRadioButtonId();

        id = 0;

        int dificultad=0;

        if(id==R.id.medio){
            dificultad=1;
        }else if (id==R.id.imposible){
            dificultad=2;
        }

        partida = new Partida(dificultad);

        ((Button)findViewById(R.id.unJug)).setEnabled(false);

        //setAlpha establece la transparencia a 0.

        ((RadioGroup) findViewById(R.id.rdgDificultad)).setAlpha(0);

        ((Button) findViewById(R.id.dosJug)).setEnabled(false);

    }

    //Rescata la casilla pulsada y se la pasa a marca().
    private void toque(View miVista) {

        if(partida==null){
           return;
        }

        int cas = 0;

        for (int i = 0; i < 9; i++) {

            if (casillas[i] == miVista.getId()) {

                cas = i;

                break;
            }
        }

        if(!partida.compruebaCasilla(cas)) {
            return;
        }
            marca(cas);

            partida.turno();

            int cas_ia = partida.ia();

            marca(partida.ia());

            partida.turno();

    }
    //Establece la imagen de fondo.
    private void marca(int casilla){

        ImageView imagen;

        imagen = (ImageView) findViewById(casillas[casilla]);

        if(partida.getJugadores()==1){

            imagen.setImageResource(R.drawable.circulo);

        }else {

            imagen.setImageResource(R.drawable.aspa);

        }
    }
}

package com.example.tres_en_ralla;
导入android.os.Bundle;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入com.google.android.material.snackbar.snackbar;
导入androidx.appcompat.app.appcompat活动;
导入androidx.appcompat.widget.Toolbar;
导入android.view.Gravity;
导入android.view.view;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.RadioGroup;
导入android.widget.Toast;
公共类MainActivity扩展了AppCompatActivity{
私家侦探;
私人党派;
卡西利亚斯私人酒店;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//在阿尔马塞纳的卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚卡迪亚。
casillas=新整数[9];
casillas[0]=R.id.a1;
casillas[1]=R.id.a2;
casillas[2]=R.id.a3;
casillas[3]=R.id.b1;
casillas[4]=R.id.b2;
casillas[5]=R.id.b3;
casillas[6]=R.id.c1;
casillas[7]=R.id.c2;
casillas[8]=R.id.c3;
}
//请把我的手放在手上。
公共空间aJugar(视图视景){
ImageView imagen;
//Limpiamos las casillas。
用于(国际c:casillas){
imagen=(ImageView)findViewById((c));
imagen.setImageResource(R.drawable.casilla);
}
jugadores=1;
if(vista.getId()==R.id.dosJug){
jugadores=2;
}
放射组botones=findViewById(R.id.rdgDificultad);
int id=botone.getCheckedRadioButtonId();
id=0;
int-deficultad=0;
if(id==R.id.medio){
难度=1;
}else if(id==R.id.impossible){
难度=2;
}
partida=新partida(deficultad);
((按钮)findViewById(R.id.unJug)).setEnabled(false);
//setAlpha establece la transparencia a 0。
((放射组)findViewById(R.id.rdgDificultad)).setAlpha(0);
((按钮)findviewbyd(R.id.dosJug)).setEnabled(false);
}
//在马卡岛上,你可以看到一个脉冲。
私人void toque(查看miVista){
if(partida==null){
返回;
}
int-cas=0;
对于(int i=0;i<9;i++){
if(casillas[i]==miVista.getId()){
cas=i;
打破
}
}
如果(!compluebacisilla(cas)){
返回;
}
马卡(中科院),;
图诺党();
int cas_ia=partida.ia();
marca(partida.ia());
图诺党();
}
//丰多旅馆。
私人void marca(内卡西拉){
ImageView imagen;
imagen=(ImageView)findViewById(casillas[casilla]);
if(partida.getJugadores()==1){
imagen.setImageResource(R.drawable.circulo);
}否则{
imagen.setImageResource(R.drawable.aspa);
}
}
}
我的activity_main.xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/fondo"
    android:orientation="horizontal"
    android:padding="@dimen/padding_pantalla"
    tools:context=".MainActivity">
    <Space
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_weight="0.5"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="center_horizontal"
        android:orientation="vertical">
        <TextView
            style="@style/titulo"
            android:text="@string/app_name" />
        <Button
            android:id="@+id/unJug"
            style="@style/button"
            android:layout_height="60dp"
            android:layout_width="wrap_content"
            android:text="@string/un_jugador" />

        <RadioGroup
            android:id="@+id/rdgDificultad"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <RadioButton
                android:id="@+id/facil"
                style="style/radio"
                android:text="@string/facil" />

            <RadioButton
                android:id="@+id/medio"
                style="style/radio"
                android:text="@string/normal" />

            <RadioButton
                android:id="@+id/imposible"
                style="style/radio"
                android:text="@string/Imposible" />

        </RadioGroup>

        <Button
            android:id="@+id/dosJug"
            style="@style/button"
            android:text="@string/dos_jugador" />


    </LinearLayout>

    <Space
        android:layout_width="0dp"
        android:layout_height="2dp"
        android:layout_weight="0.5"/>

    <GridLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:columnCount="3"
        android:rowCount="3">

        <ImageView
            android:id="@+id/a1"
            style="@style/casillas"

            />

        <ImageView
            android:id="@+id/c1"
            style="@style/casillas"

            />

        <ImageView
            android:id="@+id/a2"
            style="@style/casillas"
            android:src= "@drawable/circulo"
            />

        <ImageView
            android:id="@+id/a3"
            style="@style/casillas"
            />
        <ImageView
            android:id="@+id/c2"
            style="@style/casillas"
            android:src= "@drawable/circulo"
            />

        <ImageView
            android:id="@+id/c3"
            style="@style/casillas"
            />
        <ImageView
            android:id="@+id/b1"
            style="@style/casillas"
            android:src= "@drawable/circulo"
            />
        <ImageView
            android:id="@+id/b2"
            style="@style/casillas"
            android:src= "@drawable/aspa"
            />

        <ImageView
            android:id="@+id/b3"
            style="@style/casillas"
            android:src= "@drawable/aspa"
            />
ç
    </GridLayout>
</LinearLayout>


ç

Android组件无法定位
toque
方法,因为它是私有的

将访问修饰符更改为
public

public void toque(View miVista) { ...

这回答了你的问题吗?非常感谢ypu,这就是原因。。。。这真是一个愚蠢的理由…@ManuelLucas,发生在每个人身上。不客气。如果你接受这个答案,那会很有帮助。非常感谢。