2016-08-27 19 views
0

Androidスタジオで4つの質問で構成される短いクイズを作成しました。 1つはRadioButton、もう1つはCheckBox、3つ目は通常のButton、4番目と5番目はEditTextです。私はそれを実行した後、任意のボタンを押すたびにアプリケーションがクラッシュし、大量のエラーがログに表示されます。ボタンを押すとアプリケーションがクラッシュする

活動メイン:

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

ログのエラー:

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 [email protected] 
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 
+0

あなたはandroid:onClickのドキュメントをよく読んで、適切に使用してはいけません。 – JoxTraex

+0

a /あなたのエラーを読んでください。あなたはどう思いますか?android:onClick = "rechnung2" 'は何ですか? – njzk2

答えて

1

あなたの表示方法では空白にスコアを追加しているので、トレースの最後のエラーがかもしれrechnung2

あなたのlogcat命名方法がないことは、それを言う:

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'

提案:xmlを確認してandroid:onclickのすべての要素を見つけて、Activityを確認してください。Activityでメソッドに関する必要があります。そのよう

またAndroid Studioは警告を出し、あなたのActivityでそのメソッドを持っていない場合:onClick XML属性は、メソッドを呼び出す

enter image description here

2

あなたのXMLでは、あなたは、プロパティのonClickを定義します。つまり、そのボタンをクリックすると、アンドロイドは "onClick"プロパティで指定されたメソッドを呼び出します。 MainActivityで定義されているメソッドがないので、ランタイムエラーが発生します

2

ここには複数の問題があります。 CheckboxのonClickプロパティに "rechnung2"という名前のメソッドを宣言していますが、これを実装したことがないためです。 2番目のエラーでは、デフォルトとは異なるテーマを使用しているようで、チェーンのどこかで競合が発生している可能性があります。あなたのActivity

+0

onClickイベントの場合、onCreateメソッドのsetOnClickListenersを使用していないため、グローバルハンドラに登録してください。 switchステートメントを使用して、それぞれを適切に処理できます。参照:http://blog.cubeactive.com/onclicklistener-android-tutorial/ – d199224

2

、あなたはあなたのMainActivityにそのメソッドを持っている必要があります。さらに、次の規則に従わなければなりません。

関連する問題