【问题标题】:Quiz App force close [closed]测验应用程序强制关闭[关闭]
【发布时间】:2015-12-31 09:36:02
【问题描述】:

我正在尝试制作一个测验应用程序。我从我看过的 youtube 视频中获得了代码。我完全复制了他所做的事情,当他运行它时对她来说效果很好,但在我的情况下,当我尝试按下下一个问题时,应用程序强制关闭......第一个问题出现,当我按下 Enter 时,它强制关闭。请帮帮我,这是为了我的论文。

这里是日志

java.lang.NullPointerException
at org.intercode.triviaquiz.Quiz$1.onClick(Quiz.java:50)
at android.view.View.performClick(View.java:4377)
at android.view.View$PerformClick.run(View.java:18031)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5306)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)

代码

package org.intercode.triviaquiz;

import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
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 Quiz extends AppCompatActivity {
    TextView tvquestion;
    Button button;
    RadioGroup rg;
    RadioButton rb1, rb2, rb3;

    String questions[]={"First Android Phone?", "Name of android version4.4?", "Android is which kind of software"};
    String ans[]={"Motorola Droid","KitKat","Operating System"};
    String opt[]={"HTC-G1", "HTC-One", "Motorola Droid", "JellyBean", "Froyo", "KitKat", "Operating System", "AntiVirus", "Application"};

    int flag=0;
    public static int marks, correct, wrong;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_quiz);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        tvquestion=(TextView)findViewById(R.id.tvquestion);
        button=(Button)findViewById(R.id.button);
        rg=(RadioGroup)findViewById(R.id.rg);
        rb1=(RadioButton)findViewById(R.id.rb1);
        rb2=(RadioButton)findViewById(R.id.rb2);
        rb3=(RadioButton)findViewById(R.id.rb3);

        tvquestion.setText(questions[flag]);
        rb1.setText(opt[0]);
        rb2.setText(opt[1]);
        rb3.setText(opt[2]);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RadioButton uans = (RadioButton)findViewById(rg.getCheckedRadioButtonId());
                String ansText = uans.getText().toString();
                if (ansText.equalsIgnoreCase(ans[flag]))
                {
                    correct++;
                }
                else
                {
                    wrong++;
                }
                flag++;
                if (flag < questions.length)
                {
                    tvquestion.setText(questions[flag]);
                    rb1.setText(opt[flag * 3]);
                    rb2.setText(opt[flag * 3]);
                    rb3.setText(opt[flag * 3]);
                }
                else
                {
                    if (Main.tbflag)
                    {
                        marks = correct - wrong;
                    } else
                    {
                        marks = correct;
                    }
                    Intent in = new Intent(getApplicationContext(), Results.class);
                    startActivity(in);
                }
            }
        });
    }
}

【问题讨论】:

  • 您介意发布您的 logcat 吗?
  • Quiz.java:50 是什么
  • 我希望你们能弄清楚
  • 当然,我们会回答@RRR 问题,您的 Quit.java 文件的第 50 行是哪一行?
  • 它的 RadioButton uans = (RadioButton)findViewById(rg.getCheckedRadioButtonId());

标签: android android-activity android-studio


【解决方案1】:

LogCat 之后

第一个问题是 RadioGroup 用错误的资源 id 初始化,并且为 null,所以调用rg.getCheckedRadioButtonId() 时会出现 NullPointerException。

第二个问题是启动Activity时使用了错误的Context

Intent in = new Intent(getApplicationContext(), Results.class);

参数getApplicationContext() 错误,意图应绑定到ActivityContext,而不是Application

替换为

Intent in = new Intent(Quiz.this, Results.class);

【讨论】:

  • 好吧我把日志贴出来 sry
  • 你不能在onClickListener中传递this,它将参考当前视图
  • @RRR true,将修复错误。谢谢
  • 生病尝试替换它:P 希望它会工作
  • 先生,我已经把 logcats 放在了顶部,还将 getapplicationcontext 更改为 quiz。这不会解决它仍然强制关闭的问题
猜你喜欢
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多