简体   繁体   中英

App crashes when Buttons are pressed

I created a short quiz in Android studio that consists of 4 questions. One question has RadioButtons, the second has CheckBoxes, third has regular Buttons, and the fourth/ fifth are EditText. Whenever I press any button after running it the app crashes and there's a massive error displayed in the logs.

Activity Main:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        style="@style/Background"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.hende.germanquiz.MainActivity">


        <TextView
            android:id="@+id/Header_text_view"
            style="@style/Header"
            android:text="@string/header_text" />

        <TextView
            android:id="@+id/question_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="16dp"
            android:text="@string/questionOne" />


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

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:checked="true"
                android:onClick="Bitte schön"
                android:text="@string/wrong1_answer" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:onClick="Ich heiße"
                android:text="@string/correct_answer" />

            <RadioButton
                android:id="@+id/radio3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:onClick="Sprechen sie Deutsch?"
                android:text="@string/wrong2_answer" />

            <TextView
                android:id="@+id/question_two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="16dp"
                android:text="@string/questionTwo"
                android:textColor="#B71C1C" />

            <CheckBox
                android:id="@+id/checkbox1"
                style="@style/Buttons"
                android:onClick="rechnung1"
                android:text="@string/correct2_answer" />

            <CheckBox
                android:id="@+id/checkbox2"
                style="@style/Buttons"
                android:onClick="rechnung2"
                android:text="@string/correct3_answer" />

            <CheckBox
                android:id="@+id/checkbox3"
                style="@style/Buttons"
                android:onClick="Vogel"
                android:text="Hast du einen Vogel?" />

            <TextView
                android:id="@+id/question_three_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingTop="16dp"
                android:text="@string/question_three" />

            <TextView
                android:id="@+id/question_threea_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/question_threea" />


            <Button
                android:id="@+id/button2"
                style="@style/RegularButton"
                android:text="@string/wrong4_answer"
                android:onClick="button2"/>

            <Button
                android:id="@+id/button3"
                style="@style/RegularButton"
                android:text="@string/wrong5_answer"
                android:onClick="button3"/>
            <Button
                android:id="@+id/button1"
                style="@style/RegularButton"
                android:text="@string/correct4_answer"
                android:onClick="button1"/>



            <TextView
                android:id="@+id/aurora_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/questionFour"
                android:layout_marginTop="10dp" />

            <EditText
                android:id="@+id/edit_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/questionFive"
                android:layout_marginTop="10dp"/>

            <EditText
                android:id="@+id/edit2_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <Button
                android:id="@+id/submit_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/submit_button"
                android:onClick="calculateScore"/>

            <TextView
                android:id="@+id/score_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

        </RadioGroup>
    </LinearLayout>
</ScrollView>

MainActivity:

public class MainActivity extends AppCompatActivity {
    int score = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void questionOne(){
        RadioButton radio2 =(RadioButton)findViewById(R.id.radio2);


        if (radio2.isSelected()) {
            score = score + 1;
    }}

     public void questionTwo(){
         CheckBox checkbox1 =(CheckBox) findViewById(R.id.checkbox1);
         CheckBox checkbox2=(CheckBox) findViewById(R.id.checkbox2);

         if(checkbox1.isChecked() &&checkbox2 .isChecked()){
             score = score + 1;
         }

}
  public void questionThree(){
      Button button1 = (Button)findViewById(R.id.button1);
      Button button2 = (Button)findViewById(R.id.button2);
      Button button3 = (Button)findViewById(R.id.button3);
       if (button1.isSelected()) {
           score= score + 1;
       }
}



    public void questionFour(){
        EditText edit_text_view =(EditText) findViewById(R.id.edit_text_view);
        if (edit_text_view.getText().toString().contains("Nordlicht") || edit_text_view.getText().toString().contains("Nordlicht")) {
            score = score + 1;

    }
}

public void questionFive(){
EditText edit2_text_view=(EditText)findViewById(R.id.edit2_text_view);
    if (edit2_text_view.getText().toString().contains("On October 10th at 10:10, 10 tame goats pull 10 centners of sugar to the zoo")|| edit2_text_view.getText().toString().contains("On October 10th at 10:10, 10 tame goats pull 10 centners of sugar to the zoo")) {
         score = score + 1;

}
}public void calculateScore(View view){
  display (score);
    questionOne ();
    questionTwo ();
 questionThree();
    questionFour ();
    questionFive ();




}
    private void display(int number) {
        TextView score_text_view = (TextView) findViewById(
                R.id.score_text_view);
        score_text_view.setText("" + number);
    }}

Log error:

08-27 13:07:50.408 3344-3344/com.example.hende.germanquiz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hende.germanquiz, PID: 3344
java.lang.IllegalStateException: Could not find method rechnung2(View) in a parent or ancestor Context for 
android:onClick attribute defined on view class android.support.v7.widget.AppCompatCheckBox with id 'checkbox2'
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:5609)
at android.widget.CompoundButton.performClick(CompoundButton.java:122)
at android.view.View$PerformClick.run(View.java:22259)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
08-27 12:49:22.499 32531-416/com.example.hende.germanquiz E/InstantRun:
Failed to update existing theme for activity com.example.hende.germanquiz.MainActivity@587f4d8
java.lang.NoSuchFieldException: No field mTheme in class Landroid/content/res/Resources$Theme; 
(declaration of 'android.content.res.Resources$Theme' appears in /system/framework/framework.jar)
at java.lang.Class.getDeclaredField(Native Method)
at com.android.tools.fd.runtime.MonkeyPatcher.monkeyPatchExistingResources(MonkeyPatcher.java:374)
at com.android.tools.fd.runtime.Server.restart(Server.java:523)
at com.android.tools.fd.runtime.Server.access$600(Server.java:61)
at com.android.tools.fd.runtime.Server$SocketServerReplyThread.handle(Server.java:318)
at com.android.tools.fd.runtime.Server$SocketServerReplyThread.run(Server.java:190)
at com.android.tools.fd.runtime.Server$SocketServerThread.run(Server.java:158)
at java.lang.Thread.run
08-27 12:49:43.382 32531-32531/com.example.hende.germanquiz E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-27 12:49:43.590 32531-32531/com.example.hende.germanquiz E/SpannableStringBuilder: SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

In your xml you define property onClick. That means when you click on that button android will call method named in "onClick" property. Since you dont have those methods defined in you MainActivity, you get runtime error

There is multiple problems here. The first seems to be because you have declared a method named "rechnung2" on the onClick property of the Checkbox but you have never implemented it. On the second error it appears are you using a different theme than the default and may be causing a conflict somewhere along the chain. The last error in the trace may be because you are appending the score onto a blank space in your display method

The onClick XML attribute calls a method, you must have that method in your MainActivity . In addition you have to follow these rules:

The method you declare in the android:onClick attribute must have a 
specific signature. Specifically, the method must:

Be public
Return void
Define a View as its only parameter (this will be the View that was clicked)

In your Activity there is no method named rechnung2

Your logcat says it:

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

Suggestion : Please check your xml and find all android:onclick elements then check your Activity , in your Activity you must have regarding method.

Also Android Studio warns you if you don't have that method in your Activity like that :

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM