【问题标题】:Crashed Android App when start the click activity [closed]启动点击活动时崩溃的Android应用程序[关闭]
【发布时间】:2020-07-16 17:41:21
【问题描述】:

我正在尝试制作井字游戏。单击其中一个框时出现以下错误,最初,它可以工作,但是当我开始开发时,它突然停止工作。如何调试此错误?

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);

        }
    }
}

我的 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


【解决方案1】:

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

将访问修饰符更改为public

public void toque(View miVista) { ...

【讨论】:

  • 非常感谢您,这就是原因......这是一个非常愚蠢的理由......
  • @ManuelLucas,每个人都会遇到。不客气。如果您接受答案,它将有所帮助。谢谢!
猜你喜欢
  • 2018-03-04
  • 1970-01-01
  • 2013-06-24
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多