Android Studio zeigt zwei Methoden mit nur einer onClick-Schaltfläche. Java löst eine Ausnahme aus und ruiniert die App

Umgebung

PC:Windows10 1607 AndroidStudio:2.2.3

Eigene Fähigkeiten

Ein Infrastruktur-Server-Ingenieur, der normalerweise (vorerst) mit Linux-Servern herumspielt. Die Client-Seite ist fast leer. Ich bin neu in der Entwicklung mit IDE und Java selbst und lerne von Grund auf, während ich das Einführungsbuch lese.

Was Sie versuchen zu tun

Erstellen und Lernen von Apps, die auf Android ausgeführt werden (Letztendlich möchte ich die auf dem PC erstellte Anwendung auf dem Android-Terminal ausführen und mit meinem eigenen Server kommunizieren, um dies und das zu tun.)

In Schwierigkeiten sein

Wenn ich die installierte Taste drücke und versuche, die Methode mit onClick auszuführen, stürzt die Anwendung ab. Es fällt nicht immer und manchmal funktioniert es gut, wenn Sie in der IDE damit herumspielen.

Nachfolgend spezifische Symptome und Verfahren

Ich mache eine einfache Anwendung zur Überprüfung des Betriebs mit Android Studio. Versuchen Sie beim Lesen des Buches, Schaltflächen und Texte anzuordnen, rufen Sie die Methode mit onClick auf und lassen Sie sie etwas verarbeiten. Ich konnte alles tun, wie es in Toast anzuzeigen und den Text neu zu schreiben (ich konnte es tun ...). Das Nachschlagewerk ist hier

Danach bin ich süchtig nach dem folgenden Verfahren in der Situation, in der ich von Grund auf neu codiere. ..

Was du versuchst zu machen

Was ich gerade versuche zu machen, geht auf das einfachste zurück,

Es gibt nur zwei Punkte.

Montagevorgang

  1. Erstellen Sie ein neues Projekt. Der Projektname, mit dem die Reproduktion dieses Mal bestätigt wird, lautet "TestApp 9". Das Minimum SDK beginnt mit API Level: 15 und die Aktivität beginnt mit Empty Activity.

  2. Ich brauche die standardmäßig platzierte Textansicht nicht, also lösche sie.

    1. Wählen Sie unter Widgets in activity_main.xml die Schaltfläche aus und legen Sie sie in der oberen linken Ecke ab. Setzen Sie die ID der installierten Schaltfläche auf "buttonTest", fügen Sie dem Text eine Ressource hinzu, setzen Sie die ID der hinzugefügten Ressource auf "buttonText" und setzen Sie den Wert auf "test".
  3. Bearbeiten Sie MainActivity.java und fügen Sie den folgenden Inhalt hinzu.

MainActivity.java


~~~Der Importteil entfällt~~~

public class MainActivity extends AppCompatActivity {

    Button buttonTtest; //Nachtrag

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

        buttonTtest = (Button) findViewById(R.id.buttonTest); //Nachtrag

    }

    //Fügen Sie eine Methode hinzu, die den Inhalt beschreibt, den Sie mit onClick verschieben möchten
    public void onButtonTestClick(View view) { 
        Toast.makeText(this, "clicked", Toast.LENGTH_SHORT).show();
    }
}

Zusätzlich zu onCreate, das von Anfang an geschrieben wurde, schreibe ich einen neuen Teil, den ich hinzugefügt habe.

  1. Kehren Sie in diesem Zustand erneut zu activity_main.xml zurück und geben Sie den neu erstellten onButtonTestClick in der onClick-Eigenschaft an.

AndroidStduio1.png

Stellen Sie sicher, dass Sie es auswählen können, aber versuchen Sie es, ohne es auszuwählen (lassen Sie keine).

  1. Erstellen Sie und überprüfen Sie, ob die App auf dem virtuellen Gerät gestartet wird und die Schaltflächen wie vorgesehen platziert sind.

AndroidStduio2.png

Wenn ich die "TEST" -Taste drücke, passiert natürlich nichts (abgesehen davon mache ich mir Sorgen, dass der Wert von @ string / buttonTest in Großbuchstaben angezeigt wird, obwohl er sich im unteren Teil befindet. Ich frage mich, ob Kleinbuchstaben verwendet werden können, wenn sie gestylt sind.

  1. Geben Sie als Nächstes die Methode an, die Sie zuvor in onClick erstellt haben.

AndroidStduio3.png

IDE ist praktisch, aber ich habe immer noch Angst, weil ich nicht weiß, was hinter den Kulissen funktioniert (kann ich mir vorstellen)

  1. Erstellen Sie die installierte Schaltfläche, führen Sie sie aus und drücken Sie sie.

AndroidStduio4.png

Lass uns gehen! Ruined s (unten abgekürzt Wird angezeigt und die App funktioniert nicht mehr. Zu diesem Zeitpunkt wird die folgende Java-Ausnahme in der Spalte Ausführen von Android Studio in Rot ausgegeben (oder?).

E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.IllegalStateException: Could not find method onButtonTestClick (MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'buttonTest'
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                      at android.view.View.performClick(View.java:4084)
                      at android.view.View$PerformClick.run(View.java:16966)
                      at android.os.Handler.handleCallback(Handler.java:615)
                      at android.os.Handler.dispatchMessage(Handler.java:92)
                      at android.os.Looper.loop(Looper.java:137)
                      at android.app.ActivityThread.main(ActivityThread.java:4745)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:511)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                      at dalvik.system.NativeStart.main(Native Method)
Application terminated.

IllegalStateException klingt unangenehm. Ich kann mich nicht erinnern, etwas getan zu haben, das mich wütend gemacht hat, aber ich werde die Fehlerdetails vorerst überprüfen.

java.lang.IllegalStateException: Could not find method onButtonTestClick (MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'buttonTest'

Es heißt, dass die Methode nicht gefunden werden konnte, daher kann ich die für onClick (゚ Д ゚) Gol 'angegebene Methode nicht finden, nicht wahr? Ich denke. Auch wenn ich es nicht finden konnte, wurde es von der IDE erkannt und ich konnte es aus der Dropdown-Liste auswählen. .. Ich werde es ein wenig tun.

Danach ist viel geschrieben, aber ehrlich gesagt verstehe ich nicht. Da es View.Java: 4084 gibt, ist es sicher, dass das Iloilo-Problem hinter dem Ergebnis des Fehlers aufgetreten ist, nicht hinter dem Fehler in dem Teil, den ich geschrieben habe. Ich denke, das Wichtigste ist der erste Fehler.

Nun, ich konnte es einmal tun, warum? Ich werde ein wenig damit spielen.

  1. Überprüfen Sie den Wert des onClick-Attributs. Dann.

AndroidStduio5.png

Es gibt zwei w, dieses w Ww das erhöht sich nicht ohne Erlaubnis

  1. Ich habe Angst, also werde ich versuchen, eine Methode tot zu machen.

AndroidStduio6.png

Ich werde auskommentieren. (Ich war überrascht, dass viel Code generiert wurde, als ich ↓ mit Strg + Alt mit dem Gefühl eines Multi-Headers von Sublime Text auswählte.)

  1. Vergewissern Sie sich, dass es aus dem onClick-Attribut verschwunden ist.

AndroidStduio7.png

Ja, ich bin weg. Wenn Sie es groß bauen, haben Sie natürlich eine App mit Schaltflächen, die überhaupt nicht reagieren. Ich kehrte zum Anfang zurück.

  1. Versuchen Sie erneut, die Methode zu aktivieren. Kommentieren Sie den vorherigen Kommentar aus.

AndroidStduio9.png

Es scheint, dass View und Toast beim Kommentieren automatisch aus dem Import gelöscht wurden. Es ist bequem, aber es ist zu bequem. Wenn Sie Strg + Alt drücken, wenn es rot ist, wird es automatisch importiert, also importieren Sie es erneut.

  1. Überprüfen Sie, ob Sie eine Methode auswählen können.

AndroidStduio11.png

Der eine, der zwei war, ist zu einem zurückgekehrt. Ist es ein Ort, an dem Sie sich vorerst wohl fühlen können? Als ich heute hier mehrmals herumgespielt habe, konnte ich es so zurücksetzen und wieder aufbauen und es hat funktioniert! !! Es gab einen Fall, aber wenn ich ihn jetzt überprüfe, funktioniert er nicht mit demselben Fehler. ..

  1. Erhöhen Sie die Anzahl der Methoden wirklich.

AndroidStduio13.png

Es ist beängstigend, es ohne Erlaubnis zu erhöhen, deshalb werde ich versuchen, es hier explizit zu erhöhen. Ich habe onButtonClick2 gemacht.

  1. Stellen Sie sicher, dass Sie auswählen können.

AndroidStduio14.png

Ja, das ist richtig. Das ist gut. Da es eine große Sache ist, bauen wir mit der neu erstellten 2.

  1. Lass uns gehen! Ruiniert y (unten weggelassen

Aber schließlich tritt beim Erstellen und Ausführen derselbe Fehler auf. .. Am Ende so. ..

AndroidStduio15.png

Deshalb mache ich wwwwwwww zum Narren

E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.IllegalStateException: Could not find method onButtonTestClick2 (MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'buttonTest'
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                      at android.view.View.performClick(View.java:4084)
                      at android.view.View$PerformClick.run(View.java:16966)
                      at android.os.Handler.handleCallback(Handler.java:615)
                      at android.os.Handler.dispatchMessage(Handler.java:92)
                      at android.os.Looper.loop(Looper.java:137)
                      at android.app.ActivityThread.main(ActivityThread.java:4745)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:511)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                      at dalvik.system.NativeStart.main(Native Method)
Application terminated.

Die Fehlermeldung wird auch in 2 korrekt angezeigt.

Fazit

Niemand liebt die Apps, die ich gemacht habe

Google

Wenn Sie in der Nähe der Fehlermeldung googeln, wird ↓ dieser Bereich getroffen.

stackoverflow(1) => Ist es nicht ein Tippfehler? Wies darauf hin. Dieses Mal wähle ich eine Methode über die Android Studio-Benutzeroberfläche aus, daher glaube ich nicht, dass dies der Fall ist. ..

stackoverflow(2) => Es ist, als würde man verschiedene Dinge tun und verschiedene Dinge tun wäre cool. Ich habe diesmal nicht so viel getan ...

teratail => Oh, es sieht aus wie diese Person. Irgendwie ist die Antwort hart. w Verstehst du die Bedeutung des onClick-Attributs? => Ich glaube nicht, dass ich es überhaupt verstehe, ich bin mir sicher, vielleicht. ..

stackexchange => Oh, das ist es nicht? Ich weiß nicht was es ist, aber ich habe etwas gefunden, das so aussieht! !!

Update your Gradle to lastest version first and try again. I hope that can be solved your issue by this solution.

Nun, es ist nicht gut, den Mon zu erziehen, der ohne Erlaubnis hereinkam. .. Ich will es nicht tun .. Vorerst.

Nochmals Fazit

Als Problemumgehung, die im obigen Artikel erwähnt wurde, haben wir bestätigt, dass es mit der folgenden Korrespondenz betrieben werden kann.

Dies AndroidStudio16.png

mach das AndroidStudio17.png

Dann AndroidStudio18.png

Der Toast wurde wunderbar angezeigt. Die von onClick angegebene Methode wurde als "onButtonTestClick (MainActivity)" geschrieben, und die Rückseite (MainActivity) war Irane (ich werde ohne Erlaubnis einsteigen!). .. Nun, ich verstehe immer noch nicht die Bedeutung von Proliferation. ..

Wenn Sie etwas über diese Angelegenheit wissen, würde ich mich freuen, wenn Sie uns Ihre Meinung mitteilen könnten. m (_ _) m

Recommended Posts

Android Studio zeigt zwei Methoden mit nur einer onClick-Schaltfläche. Java löst eine Ausnahme aus und ruiniert die App
[Android Studio] Legen Sie ein beliebiges Bild für den Anwendungshintergrund fest. [Java]
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
[Android] Ändern Sie den App-Namen und das App-Symbol für jeden Geschmack
[Android Studio] [Für Anfänger] Lassen Sie uns den Bildschirm und das Verzeichnis grob erklären
Einführung in die Android App-Entwicklung 1 Installieren von JDK und Android Studio für Mac
Erstellen einer App und erstmaliges Bereitstellen mit heroku
Die Android App stürzt ab. Klicken Sie einfach auf eine Schaltfläche und es wird fallen.