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

时间:2014-02-03 23:10:56

标签: java android adt oncreate

在我的应用中,我正在尝试让我的活动更改按钮上的文字。当我在onCreate()中调用ansGen()方法时,我得到一个黑屏。 过了一会儿,出现错误,应用程序关闭。

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

这是我的代码 with ansGen()方法(没有import和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");
}

我到处搜寻都没有用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

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

tempStringy=AnswerArray[AnsVal[0]];

AnsVal[0]仍为-1。你正试图这样做:

AnswerArray[-1]

这就是你得到例外的地方。将其包裹在try-catch中并打印堆栈跟踪以确认。也许您想将AnsVal初始化为:

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

答案 1 :(得分:0)

我测试了你的代码并找到了

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

你的代码中的这个条件使得x for循环的值为1,所以每次x将为值2时它将是不定式循环,这个条件使得x = 1所以循环x < 4中的条件不会发生,您将收到带有(等待或关闭程序)消息的消息

我不知道你的代码逻辑,所以试着处理它