I'm trying to make a tic-tac-toe game. I get the following error when I click on one of the boxes, Initially, it worked, but when I started developing it suddenly stopped working. How can I debug this error?
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)
My Main Activity is this:
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);
}
}
}
My activity_main.xml is this:
<?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>