Android应用随按钮点击而崩溃

时间:2016-10-30 01:15:51

标签: java android

我根据本教程创建了一个简单的测验,但应用程序崩溃了按钮"下一个答案"这与选中的单选按钮有关。

主要代码:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class Display extends Activity {
    TextView tv;
    Button btnNext;
    RadioGroup rg;
    RadioButton rb1, rb2,rb3;
    String questions[]={"Capital of Portugal?", "Capital of Spain?", "Capital of France?"};
    String answers[]={"Lisbn","Madrid","Paris"};
    String options[]={"Zuriq", "London","Lisbon","Manchester","Buenos Aires","Madrid", "NY", "Paris","Moscow"};

    int flag=0;

    public static int marks,correct,wrong;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dispaly);

        tv=(TextView) findViewById(R.id.tvque);
        btnNext=(Button) findViewById(R.id.btnNext);
        rb1= (RadioButton) findViewById(R.id.radioButton);
        rb2= (RadioButton) findViewById(R.id.radioButton2);
        rb3= (RadioButton) findViewById(R.id.radioButton3);

        tv.setText(questions[flag]);
        rb1.setText(options[flag*3]);
        rb2.setText(options[(flag*3)+1]);
        rb3.setText(options[(flag*3)+2]);

        Toast.makeText(this, "Negative Marks: " + MainActivity.tbflag,   1000).show();

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            //The error comes from the line bellow, i believe:

                RadioButton user_answer=  (RadioButton)findViewById(rg.getCheckedRadioButtonId());
                String answerText=user_answer.getText().toString();

                if(answerText.equalsIgnoreCase(answers[flag])){
                    correct++;
                }else{
                    wrong++;
                    flag++;
                    if(flag<questions.length){
                        tv.setText(questions[flag]);
                        rb1.setText(options[flag*3]);
                        rb2.setText(options[(flag*3)+1]);
                        rb3.setText(options[(flag*3)+2]);
                    }
                    else
                    {
                        if(MainActivity.tbflag)
                        {
                            marks=correct-wrong;
                        }
                        else
                        {
                            marks=correct;
                        }
                        Intent in =new Intent(getApplicationContext(), ResultActivity.class);
                        startActivity(in);
                    }
                }
            }
        });
    }
}

记录消息:

  

java.lang.NullPointerException:尝试调用虚方法&#39; int android.widget.RadioGroup.getCheckedRadioButtonId()&#39;在空对象引用上

我不明白这个错误,为什么这个方法不被调用?有人可以帮忙吗?

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
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.vtorferreira.anew.MainActivity">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/tvque"
    tools:text="Questions" />
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/group">
    <RadioButton
        android:text="RadioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="32dp"
        android:id="@+id/radioButton" />

    <RadioButton
        android:text="RadioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/radioButton"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/radioButton2" />

    <RadioButton
        android:text="RadioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/radioButton3"
        android:layout_below="@+id/radioButton2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RadioGroup>

<Button
    android:text="Next Question"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="60dp"
    android:layout_marginStart="60dp"
    android:layout_marginBottom="125dp"
    android:id="@+id/btnNext" />
 </RelativeLayout>

1 个答案:

答案 0 :(得分:2)

您获得第一个NullPointerException的原因是因为您必须在使用前rg充气。

第二个NullPointerException可能是因为你正在按下&#34;下一个&#34;没有选中单选按钮的按钮。为防止这种情况,您可以在OnClickListener内添加空检查,或者默认选择其中一个单选按钮。要默认选择单选按钮,请将以下内容添加到XML:

<RadioGroup
    ...
    android:checkedButton="@+id/some-radio-button-id">
    ...
</RadioGroup>

或者,您可以在RadioButton中设置默认选中Activity

rg.check(R.id.radioButton)