首页 > 解决方案 > Android测验应用程序在检查用户答案时崩溃

问题描述

我遇到的问题似乎发生在 checkIfRight() 中,我希望它获取单击按钮时的文本,然后根据 rightAnswers 数组元素检查该文本,如果正确则显示“正确”,如果错误则显示“错误”即使我在 if 语句中比较两个字符串,这似乎也不起作用。如果有人可以帮助我,我将永远感激不尽。

这是我的 java 类的以下代码:

package com.example.tass.damnquizinfoapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

public class Categories extends AppCompatActivity {

int count = 1;
Button btn;
TextView score;
int count2 = 0;
String buttonText;



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



}


String[] quesitons =
        {
                "What was the tallest Damn as of 2017?",
                "How many people did the South Fork Dam kill in 1889?",
                "What do Damns generate?",
                "By how much percent did freshwater species decline by due to dams since 1970?",
                "Around what time was the first damn built?",
                "How many large(15m+) dams are in existence today?",
                "The average dam can be expected to cost how much?"
        };

String[] rightAnswers =
        {
                "Jinping-I",
                "2200",//right
                "Energy",//right
                "37%",
                "4000 B.C",
                "57,000",
                "A few billion dollars"
        };

String[] sampleAnswersA =
        {
                "The Sanxia",
                "2200",//right
                "Energy",//right
                "20%",
                "1280 A.D",
                "7,000",
                "Less than $20million"
        };

String[] sampleAnswersB =
        {
                "Jinping-I",//right
                "204",
                "Fish",
                "68%",
                "4000 B.C",//right
                "57,000",//right
                "More than $1 trillion"
        };

String[] sampleAnswersC =
        {
                "Guri Dam",
                "7819",
                "Water",
                "37%", //right
                "2800 B.C",
                "78,0000",
                "A few billion dollars"//right
        };



public void a1()
{

    btn = (Button) findViewById(R.id.q1);
    btn.setText(sampleAnswersA[count]);



}

public void a2()
{

    btn = (Button) findViewById(R.id.q2);
    btn.setText(sampleAnswersB[count]);


}

public void a3()
{

    btn = (Button) findViewById(R.id.q3);
    btn.setText(sampleAnswersC[count]);
    getQuestions();


}

public void getQuestions()
{
    TextView txt;
    txt = (TextView) findViewById(R.id.mytext);
    txt.setText(quesitons[count]);

}


  //THIS SEEMS TO BE CAUSING ME PROBLEMS 
 public void checkIfRight()

{
    String buttonText;
    buttonText = btn.getText().toString();
    if (rightAnswers[count2].equals(buttonText))
    {
        score = findViewById(R.id.score);
        score.setText("right");
    }

    else{score.setText("wrong");}

}


public void onClick(View v)
{
    a1();
    a2();
    a3();
    checkIfRight();
    getQuestions();
    count++;
    count2++;
}

}

这是 XML 类的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivity"
android:background="#e7e7e7"
>

 <ImageView
   android:layout_width="350dp"
   android:layout_height="450dp"
   android:src="@drawable/whitebackground"
   android:layout_centerVertical="true"
   android:layout_centerHorizontal="true"
   />

 <Button
   android:id="@+id/q1"
   android:layout_width="300dp"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:layout_centerHorizontal="true"
   android:onClick="onClick"
   android:layout_marginTop="180dp"
   android:background="@drawable/rounded_btn"
   android:text="The Sanxia"
   android:textColor="#FFFFFF"
   android:textStyle="bold" />

 <Button
   android:id="@+id/q2"
   android:layout_width="300dp"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:layout_centerHorizontal="true"
   android:layout_marginBottom="203dp"
   android:onClick="onClick"
   android:background="@drawable/rounded_btn"
   android:text="Jinping-I"
   android:textColor="#FFFFFF"
   android:textStyle="bold" />


 <Button
   android:id="@+id/q3"
   android:layout_width="300dp"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:layout_centerHorizontal="true"
   android:layout_marginBottom="128dp"
   android:onClick="onClick"
   android:background="@drawable/rounded_btn"
   android:text="Guri Dam"
   android:textColor="#FFFFFF"
   android:textStyle="bold"

   />

 <TextView
   android:id="@+id/mytext"
   android:layout_width="253dp"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:layout_centerHorizontal="true"
   android:layout_marginTop="78dp"
   android:text="What was the tallest Damn as of 2017?"
   android:textAlignment="center"
   android:textColor="#000000"
   android:textSize="20dp"
   android:textStyle="bold" />

 <Button
   android:id="@+id/mybutton"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentBottom="true"
   android:layout_centerHorizontal="true"
   android:layout_marginBottom="50dp"
   android:text="NEXT"
   android:onClick="onClick"
   />


 <TextView
   android:id="@+id/score"
   android:layout_width="99dp"
   android:layout_height="130dp"
   android:layout_above="@+id/q1"
   android:layout_alignParentEnd="true"
   android:layout_marginBottom="-180dp"
   android:text="Answer:"
   android:textStyle="bold" />

  </RelativeLayout>

标签: javaandroidxml

解决方案


检查是否正确的方法你把这一行放在里面 if score = findViewById(R.id.score) 你把它放在本地所以当执行 else 它会崩溃 把它放在 if 之前是错误的,我建议你把所有的行 findviewbyid 放在 oncreate 方法中


推荐阅读