Android Studio montre deux méthodes qui n'ont qu'un seul bouton onClick, Java lève une exception et ruine l'application

environnement

PC:Windows10 1607 AndroidStudio:2.2.3

Propre compétence

Un ingénieur de serveur d'infrastructure qui joue habituellement avec les serveurs Linux (pour le moment). Le côté client est presque vide. Je suis nouveau dans le développement en utilisant IDE et Java lui-même, et j'étudie à partir de zéro en lisant le livre d'introduction.

Ce que vous essayez de faire

Créer et apprendre des applications qui s'exécutent sur Android (En fin de compte, je souhaite exécuter l'application construite sur le PC sur le terminal Android et communiquer avec mon propre serveur pour faire ceci et cela)

Être en difficulté

Lorsque j'appuie sur le bouton installé et que j'essaye d'exécuter la méthode avec onClick, l'application plante. Cela ne tombe pas toujours, et parfois cela fonctionne bien si vous le manipulez sur l'IDE.

Ci-dessous, des symptômes et des procédures spécifiques

Je crée une application de vérification de fonctionnement simple avec Android Studio. En lisant un livre, essayez d'organiser les boutons et le texte, appelez une méthode avec onClick, laissez-la faire quelque chose, J'ai pu tout faire comme l'afficher dans Toast et réécrire le texte (j'ai pu le faire ...). Le livre de référence est ici

Après cela, je suis accro à la procédure suivante dans la situation où je recode à partir de zéro. ..

Ce que vous essayez de faire

Ce que j'essaye de faire maintenant revient au plus simple,

Il n'y a que deux points.

Procédure de montage

  1. Créez un nouveau projet. Le nom du projet utilisé pour confirmer la reproduction cette fois-ci est "TestApp 9". En outre, le SDK minimum commence par le niveau d'API: 15 et l'activité commence par une activité vide.

  2. Je n'ai pas besoin du textView qui est placé par défaut, alors supprimez-le.

    1. Sélectionnez Button from Widgets sur activity_main.xml et déposez-le dans le coin supérieur gauche. Définissez l'ID du bouton installé sur "buttonTest", ajoutez une ressource au texte, définissez l'ID de la ressource ajoutée sur "buttonText" et définissez la valeur sur "test".
  3. Modifiez MainActivity.java et ajoutez le contenu suivant.

MainActivity.java


~~~La partie importée est omise~~~

public class MainActivity extends AppCompatActivity {

    Button buttonTtest; //Postscript

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

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

    }

    //Ajoutez une méthode qui décrit le contenu que vous souhaitez déplacer avec onClick
    public void onButtonTestClick(View view) { 
        Toast.makeText(this, "clicked", Toast.LENGTH_SHORT).show();
    }
}

En plus de onCreate écrit depuis le début, j'écris une nouvelle partie que j'ai ajoutée.

  1. Dans cet état, revenez de nouveau à activity_main.xml et spécifiez le onButtonTestClick nouvellement créé dans la propriété onClick.

AndroidStduio1.png

Assurez-vous de pouvoir le sélectionner, mais essayez de créer sans le sélectionner (ne laissez aucun).

  1. Créez et vérifiez que l'application se lance sur le périphérique virtuel et que les boutons sont placés comme prévu.

AndroidStduio2.png

Bien sûr, lorsque j'appuie sur le bouton "TEST", rien ne se passe (en passant, je crains que la valeur de @ string / buttonTest soit en majuscules même si je la mets en bas. Je me demande si des lettres minuscules peuvent être utilisées si elles sont stylées).

  1. Ensuite, spécifiez la méthode que vous avez créée précédemment dans onClick.

AndroidStduio3.png

L'IDE est pratique, mais j'ai toujours peur car je ne sais pas ce qui fonctionne dans les coulisses (j'imagine)

  1. Générez, exécutez et appuyez sur le bouton que vous avez installé.

AndroidStduio4.png

Allons-y! Ruined s (abrégé ci-dessous Sera affiché et l'application cessera de fonctionner. À ce stade, l'exception Java suivante est affichée en rouge dans la colonne Exécuter d'Android Studio (n'est-ce pas?).

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 semble désagréable. Je ne me souviens pas d'avoir fait quoi que ce soit qui m'ait mis en colère, mais je vais vérifier les détails de l'erreur pour le moment.

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'

Il indique Impossible de trouver la méthode, donc je ne trouve pas la méthode que vous avez spécifiée pour onClick (゚ Д ゚) Gol ', n'est-ce pas? Je pense. Même si je ne pouvais pas le trouver, il était reconnu par l'EDI et je pouvais le sélectionner dans la liste déroulante. .. Je vais le faire un peu.

Après ça, c'est beaucoup écrit, mais honnêtement je ne comprends pas. Puisqu'il y a View.Java: 4084, il est certain que le problème d'Iloilo est survenu derrière le résultat de l'erreur, pas l'erreur dans la partie que j'ai écrite. Je pense que l'important est la première erreur.

Eh bien, j'ai pu le faire une fois, pourquoi? Je vais jouer un peu avec.

  1. Vérifiez la valeur de l'attribut onClick. Puis.

AndroidStduio5.png

Il y a deux w, ce w Ww qui n'augmente pas sans permission

  1. J'ai peur, alors je vais essayer de faire mourir une méthode.

AndroidStduio6.png

Je vais commenter. (J'ai été surpris que beaucoup de code ait été généré lorsque j'ai sélectionné ↓ avec Ctrl + Alt avec la sensation de multi-en-tête de Sublime Text.)

  1. Confirmez qu'il a disparu de l'attribut onClick.

AndroidStduio7.png

Oui, je suis parti. Si vous le construisez en grand, vous aurez naturellement une application avec des boutons qui ne répondent pas du tout. Je suis revenu au début.

  1. Essayez à nouveau d'activer la méthode. Décommentez le commentaire précédent.

AndroidStduio9.png

Il semble que View et Toast ont été automatiquement supprimés de l'importation lorsque j'ai commenté. C'est pratique, mais c'est trop pratique. Si vous appuyez sur Ctrl + Alt alors qu'il est rouge, il sera importé automatiquement, alors importez-le à nouveau.

  1. Vérifiez à nouveau que vous pouvez sélectionner une méthode.

AndroidStduio11.png

Celui qui était deux est revenu à un. Est-ce un endroit où vous pouvez vous sentir à l'aise pour le moment? Donc, quand je déconnais ici plusieurs fois aujourd'hui, je pouvais le remettre comme ça et le reconstruire et ça a marché! !! Il y avait un cas, mais si je le vérifie maintenant, cela ne fonctionnera pas avec la même erreur. ..

  1. Augmentez vraiment le nombre de méthodes.

AndroidStduio13.png

C'est effrayant de l'augmenter sans permission, alors je vais essayer de l'augmenter explicitement ici. J'ai fait onButtonClick2.

  1. Assurez-vous de pouvoir sélectionner.

AndroidStduio14.png

Oui c'est vrai. C'est bon. Comme c'est un gros problème, construisons avec le 2.

  1. Allons-y! Ruiné y (Omis ci-dessous

Mais après tout, lorsque je le construis et l'exécute, la même erreur se produit. .. En fin de compte, comme ça. ..

AndroidStduio15.png

C'est pourquoi je me moque de wwwwwwww

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.

Le message d'erreur s'affiche également correctement dans 2.

Conclusion

Personne n'aime les applications que j'ai créées

Google

Si vous recherchez sur Google près du message d'erreur, ↓ cette zone sera frappée.

stackoverflow(1) => N'est-ce pas une faute de frappe? Souligné. Cette fois, je sélectionne une méthode dans l'interface graphique d'Android Studio, donc je ne pense pas que ce soit le cas. ..

stackoverflow(2) => C'est comme faire diverses choses et faire diverses choses serait cool. Je n'ai pas fait grand chose cette fois ...

teratail => Oh, ça ressemble à cette personne. D'une manière ou d'une autre, la réponse est dure. w Comprenez-vous la signification de l'attribut onClick? => Je ne pense pas comprendre du tout, j'en suis sûr, peut-être. ..

stackexchange => Oh, ce n'est pas ça? Je ne sais pas ce que c'est, mais j'ai trouvé quelque chose qui y ressemble! !!

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

Eh bien, ce n'est pas bon d'élever le garçon qui est entré sans permission. .. Je ne veux pas le faire. .. Pour le moment.

Conclusion encore

Comme solution de contournement mentionnée dans l'article ci-dessus, nous avons confirmé qu'il peut être utilisé avec la correspondance suivante.

cette AndroidStudio16.png

fais ça AndroidStudio17.png

Puis AndroidStudio18.png

Le toast était affiché à merveille. La méthode spécifiée par onClick a été écrite comme "onButtonTestClick (MainActivity)", et l'arrière (MainActivity) était Irane (je vais entrer sans permission!). .. Eh bien, je ne comprends toujours pas le sens de la prolifération. ..

Si vous avez des connaissances à ce sujet, je vous serais reconnaissant de bien vouloir nous donner votre avis. m (_ _) m

Recommended Posts

Android Studio montre deux méthodes qui n'ont qu'un seul bouton onClick, Java lève une exception et ruine l'application
[Android Studio] Définir une image arbitraire pour l'arrière-plan de l'application [Java]
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
[Android] Modifiez le nom de l'application et l'icône de l'application pour chaque saveur
[Android Studio] [Pour les débutants] Expliquons grossièrement l'écran et le répertoire
Introduction au développement d'applications Android 1 Installation de JDK et d'Android Studio pour mac
Créer une application et la déployer pour la première fois avec heroku
L'application Android plante. Cliquez simplement sur un bouton et il tombera.