java - Android 应用程序黑屏( onCreate() )

标签 java android adt oncreate

在我的应用程序中,我试图让我的 Activity 更改按钮上的文本。当我在 onCreate() 中调用 ansGen() 方法时,出现黑屏。 一段时间后,出现错误并且应用程序关闭。

但是当onCreate()中的ansGen()方法调用被注释时,它显示正常(显然没有ansGen()方法的功能。

这是我的代码 ansGen() 方法(没有导入和 onCreateOptionsMenu):

public class QuizActivity extends Activity
{
Button Answer1;
Button Answer2;
Button Answer3;
Button Answer4;

String[] QuestionArray =
{ "What element has atomic number 1?",
        "What is the second most abundant element on Earth?",
        "Element with symbol Li ?", "Has 4 protons?" };
String[] AnswerArray =
{ "Hydrogen", "Helium", "Lithium", "Beryllium", "Boron", "Carbon",
        "Nitrogen" };




public String tempStringy="";

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

    int AnsArraylen=AnswerArray.length;



    Answer1 = (Button) findViewById(R.id.Answer1);
    Answer2 = (Button) findViewById(R.id.Answer2);
    Answer3 = (Button) findViewById(R.id.Answer3);
    Answer4 = (Button) findViewById(R.id.Answer4);

    //AnswerArray[randAnswers[0]]


    Answer1.setText("Hello");
    Answer2.setText("Hello");
    Answer3.setText("Hello");
    Answer4.setText("Hello");       


    **ansGen(AnsArraylen);**

}


public void ansGen(int AnsArraylen)
{
    Random randomizer=new Random();
    int[] AnsVal={-1,-1,-1,-1};
    int numchecker=0;

    for (int x=0;x<4;x+=1)
    {
        int tempVal=randomizer.nextInt(AnsArraylen);

        if (tempVal==AnsVal[0])
        {
            numchecker=1;
        }
        if (tempVal==AnsVal[1])
        {
            numchecker=1;
        }
        if (tempVal==AnsVal[2])
        {
            numchecker=1;
        }
        if (tempVal==AnsVal[3])
        {
            numchecker=1;
        }


        if (numchecker==0)
        {
            AnsVal[x]=tempVal;
        }

        if (numchecker==1)
        {
            x-=1;
        }

    }

    tempStringy=AnswerArray[AnsVal[0]];
    //Answer1.setText("Hup");
}

我到处寻找都没有结果。

感谢您的帮助!

最佳答案

当您调用randomizer.nextInt(AnsArraylen)时,您可以获得0到3之间的值(含)。如果这个 tempVal 为 0,那就没问题,因为您只需将 AnsArray[x] 设置为当前的 tempVal 即可。但是,例如,当 tempVal 为 1 时会发生什么?除了最后一个将 x 设置为 -1 之外,您不会进入这些 if 中的任何一个,因此在下一次循环迭代中它将再次变为 0。除了这对你是否有意义之外,错误就在下一行。在这种情况下你正在做:

tempStringy=AnswerArray[AnsVal[0]];

但是AnsVal[0]仍然是-1。因此,您正在尝试执行以下操作:

AnswerArray[-1]

这就是您收到异常的地方。将其包装在 try-catch 中并打印堆栈跟踪以进行确认。也许您想将 AnsVal 初始化为:

int[] AnsVal={0,1,2,3};

关于java - Android 应用程序黑屏( onCreate() ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539765/

相关文章:

java - 使用 JSch Java 库 SftpProgressMonitor 或任何其他类/方法,如何监控 SFTP 文件传输的传输速度?

java - 使用不同的参数运行两个相同的测试

Android camera2 API - 实时显示处理过的帧

java - 多线程java中的队列是无阻塞的

java - 在圆内创建三角形

java - 解析颜色不再适用于十六进制值

Android:来自 AlertDialog 的 startActivity()

android - adt插件升级到23.0.6.1720515和sdk tools升级到24.1.2后出现的问题

eclipse中的Android Development Tool 23.0.0和Android L Update错误

android-layout - 图形布局编辑器可以显示占位符图像和文本吗?