Java OnActivity结果无法正常工作

Java OnActivity结果无法正常工作,java,android,android-activity,Java,Android,Android Activity,所以,我有一个问答游戏,我有一堆弹出屏幕(用于回答错误、游戏结束、时间到了等等)。我的游戏有15个关卡,每个关卡有不同数量的问题,不同的时间等等。例如,当我完成第1级时,我想在弹出窗口中显示一些信息,当用户单击OK时,我想加载下一级。我做了所有这些,除了在onActivityResult方法中出现了一些问题,它总是加载最后一个案例。这是我的密码: static final int MY_REQUEST = 0; Intent i = new Intent(this, Popup_nivoi.c

所以,我有一个问答游戏,我有一堆弹出屏幕(用于回答错误、游戏结束、时间到了等等)。我的游戏有15个关卡,每个关卡有不同数量的问题,不同的时间等等。例如,当我完成第1级时,我想在弹出窗口中显示一些信息,当用户单击OK时,我想加载下一级。我做了所有这些,除了在onActivityResult方法中出现了一些问题,它总是加载最后一个案例。这是我的密码:

static final int MY_REQUEST = 0;

Intent i = new Intent(this, Popup_nivoi.class);
            nivo++;
            nivoKraj++;
            switch(nivo) 
            {
                case 2:
                {
                    brojPitanja = 11;
                    greska = 4;
                    mogucnostPreskakanjaPitanja = 2;
                    i.putExtra("brojPitanja", brojPitanja);
                    i.putExtra("vreme", 100);
                    i.putExtra("pravoNaGreske", greska);
                    i.putExtra("nivo", nivo);
                    i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                    break;
                }
                case 3:
                {
                    brojPitanja = 12;
                    greska = 4;
                    mogucnostPreskakanjaPitanja = 2;
                    i.putExtra("brojPitanja", brojPitanja);
                    i.putExtra("vreme", 95);
                    i.putExtra("pravoNaGreske", greska);
                    i.putExtra("nivo", nivo);
                    i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                    break;
                }
                case 4:
                {
                    brojPitanja = 13;
                    greska = 3;
                    mogucnostPreskakanjaPitanja = 2;
                    i.putExtra("brojPitanja", brojPitanja);
                    i.putExtra("vreme", 90);
                    i.putExtra("pravoNaGreske", greska);
                    i.putExtra("nivo", nivo);
                    i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                    break;
                }
                .
                .
                .
                .
                case 15:
                {
                    brojPitanja = 23;
                    greska = 0;
                    mogucnostPreskakanjaPitanja = 0;
                    i.putExtra("brojPitanja", brojPitanja);
                    i.putExtra("vreme", 35);
                    i.putExtra("pravoNaGreske", greska);
                    i.putExtra("nivo", nivo);
                    i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                    break;
                }
                case 16:
                {
                    Intent iFinale = new Intent(this, Finale.class);
                    startActivityForResult(iFinale, 6);
                    break;
                }
            }
            cancelAllTimers();
            startActivityForResult(i, MY_REQUEST);
这是我在弹出类中所做的,按下OK按钮:

ok.setOnClickListener(new OnClickListener()
    {
        public void onClick(View paramAnonymousView)
        {
            Intent localIntent = new Intent();
            setResult(RESULT_OK, localIntent);
            finish();
        }
    });
在我的游戏课上,这就是它开始变得奇怪的地方(我的_请求的第一件事是错误的答案弹出窗口):


我不明白为什么,但它总是出现在案例3中。

首先改变这个:startActivityForResult(I,1)

对此:startActivityForResult(我,我的请求)

当你输入1时,意味着当你从下一个活动返回时,它将始终为1。 您应该为每个案例使用不同的请求代码

您的代码应该如下所示: 受保护的void onActivityResult(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据)


如果不中断,案例将移动到下一个案例,直到结束或找到中断。

您忘记放置中断语句,这就是为什么每次控制都会出现在最后一个案例语句中,您可以通过添加它来修复此问题

switch(requestCode) {
            case 0:
                if(resultCode == RESULT_OK) {

                    nextQuestion();
                    timer.start();

            }
            break;
            case 1:
                if(resultCode == RESULT_OK) {
                    nextQuestion();
                    timer1.start();

           }   
            break;       
            case 2:
                if(resultCode == RESULT_OK) {
                nextQuestion();
                timer2.start();

           }
           break;
            case 3:
                if(resultCode == RESULT_OK) {
                nextQuestion();
                timer3.start();
          }
 }

您的StartActivity中将RequestCode硬编码为1!! 这就是OnActivityResult()始终匹配1的原因

startActivityForResult(i, 1);

但是当我尝试我的_请求而不是1时,我只会一个接一个地获得弹出窗口,下一级不会加载。是的,我可以看到您的问题。其工作方式是startActivityForResult()的第二个参数是活动完成时返回的值,并传递到onActivityResult()中方法。我可以从您最初设置MY_REQUEST=0的代码中看出,但您从未将其设置为任何其他值。因此,基本上任何活动都将传回一个0的请求代码。在启动活动之前,您需要将其设置为适当的值。您编写了案例2:if(){break;},但应该是案例2:if(){}break;
switch(requestCode) {
            case 0:
                if(resultCode == RESULT_OK) {

                    nextQuestion();
                    timer.start();

            }
            break;
            case 1:
                if(resultCode == RESULT_OK) {
                    nextQuestion();
                    timer1.start();

           }   
            break;       
            case 2:
                if(resultCode == RESULT_OK) {
                nextQuestion();
                timer2.start();

           }
           break;
            case 3:
                if(resultCode == RESULT_OK) {
                nextQuestion();
                timer3.start();
          }
 }
startActivityForResult(i, 1);