点击特定单选按钮后打开第二个活动,否则显示消息。

3

我刚接触Android/Java编程,正在寻求一些帮助,针对我正在处理的一个非常基础的应用程序。我主要是为了熟悉Java编码和构建Droid应用程序而构建此应用程序,请多多包涵。

我有10个单选按钮分组在一起,只有其中的一个是正确答案(第10个按钮)。如果用户单击其中任何一个1-9的按钮,我会显示一条消息,说“很抱歉,请重试”,但是如果他们单击第10个按钮,我想要它带他们转到一个新的活动页面,即一个页面上,我将放置一些图形和文本,表示祝贺和类似的事情。1-9的按钮工作正常,但当我单击第10个按钮时,我收到一个强制关闭错误。

以下是我目前的代码:

    public class MainQuiz extends Activity implements OnCheckedChangeListener, android.widget.RadioGroup.OnCheckedChangeListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_quiz);
    ((RadioGroup)findViewById(R.id.radio_group)).setOnCheckedChangeListener(this);}  

public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {    
        String numeral = null;              
        if (checkedId == R.id.button1) {
            numeral = "Nope, try again!";
        } else if (checkedId == R.id.button2) {
            numeral = "Nope, try again!";
        } else if (checkedId == R.id.button3) {
            numeral = "Nope, try again!";
        }   
        else if (checkedId == R.id.button4) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button5) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button6) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button7) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button8) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button9) {
            numeral = "Nope, try again!";
        } 
        else if (checkedId == R.id.button10) {
            Intent myIntent = new Intent(MainQuiz.this, CorrectAnswer.class); 
            MainQuiz.this.startActivity(myIntent);


        } 
        Toast.makeText(getApplicationContext(), ""+numeral+"",
                Toast.LENGTH_SHORT).show();        } 

任何帮助都将不胜感激,我相信这只是一个简单的修复,我也相信在语法和代码方面有一些明显的问题,但是,我还是个新手 :)

谢谢!

下面是强制关闭后的日志:

11-14 13:56:48.982: D/AndroidRuntime(862): Shutting down VM
11-14 13:56:48.982: W/dalvikvm(862): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-14 13:56:48.992: E/AndroidRuntime(862): FATAL EXCEPTION: main
11-14 13:56:48.992: E/AndroidRuntime(862): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.test.quiz/com.test.quiz.CorrectAnswer}: java.lang.ClassCastException: com.test.quiz.CorrectAnswer
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.os.Looper.loop(Looper.java:123)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-14 13:56:48.992: E/AndroidRuntime(862):  at java.lang.reflect.Method.invokeNative(Native Method)
11-14 13:56:48.992: E/AndroidRuntime(862):  at java.lang.reflect.Method.invoke(Method.java:521)
11-14 13:56:48.992: E/AndroidRuntime(862):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-14 13:56:48.992: E/AndroidRuntime(862):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-14 13:56:48.992: E/AndroidRuntime(862):  at dalvik.system.NativeStart.main(Native Method)
11-14 13:56:48.992: E/AndroidRuntime(862): Caused by: java.lang.ClassCastException: com.test.quiz.CorrectAnswer
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
11-14 13:56:48.992: E/AndroidRuntime(862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
11-14 13:56:48.992: E/AndroidRuntime(862):  ... 11 more

2
很抱歉,你所粘贴的内容不足。能否请你粘贴一下堆栈跟踪(红色错误信息)? - OrhanC1
我该如何将Logcat中的内容添加到这个问题中?评论字段似乎仅限于584个字符...? - user1824651
只需添加崩溃部分-完整的异常跟踪。暂时忽略其余部分。 - Gabe Sechan
@user1824651:编辑你的问题并添加堆栈跟踪。在标签下方的分享按钮旁边应该有一个编辑按钮。 - PearsonArtPhoto
4个回答

1
我不知道你的问题是什么,但你可以改进你的代码:使用“switch-case”结构。
switch (chekedId) {
        case R.id.button10:
            Intent myIntent = new Intent(MainQuiz.this, CorrectAnswer.class); 
            startActivity(myIntent);
            break;
        default:
            Toast.makeText(getApplicationContext(), "Nope, try again!",
                Toast.LENGTH_SHORT).show();       
        }

1

强制关闭会在您的logcat文件中始终放置一个异常堆栈跟踪。请在未来的帖子中加入此信息,它告诉我们哪一行崩溃以及原因。

从您的代码和对Android的新鲜程度来看,我猜您可能没有将CorrectAnswer活动添加到清单中。


感谢回复。不幸的是,我确实将该活动添加到清单文件中。在发布我的问题之前,我尽力查找其他主题,这是我发现的其中之一 :) - user1824651

0

看起来这一行很可能是导致你问题的原因。

MainQuiz.this.startActivity(myIntent);

移除MainQuiz,它应该就能工作了

this.startActivity(myIntent);

我尝试过这样做,但不幸的是它仍然表现相同并且崩溃了。请问您为什么认为那是罪魁祸首?只是好奇想继续增进自己的知识。 - user1824651
1
当你不在一个私有子类中时,使用Classname.this是不寻常的。我认为并不是错误,只是看起来很奇怪。 - Gabe Sechan

0
MainQuiz.this.startActivity(myIntent);

替换为

startActivity(myIntent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接