startActivityForResult不会正确发送额外内容

时间:2014-04-25 00:01:37

标签: java android

我有一个15级的问答游戏。在每个级别之后,我会弹出一些信息(游戏级别和某些级别规则)。在15级之后,当前的最终弹出窗口显示用户获胜的点数。我使用startActivityForResult打开弹出窗口并发送一些额外的东西,它工作正常,直到最后一个弹出窗口。在最后一场比赛之后,它应该以总分打开最终的弹出窗口。但它没有做好。它打开我的级别弹出窗口,但所有信息都填充了零。我不知道它来自哪里。按下OK后,它会打开最终弹出窗口,但不是总得分,而是得到0.这里是代码:

Intent i = new Intent(this, Popup_nivoi.class);
            nivo++;
            REQUEST++;
            switch(nivo) {
                case 2:
                {
                    brojPitanja = 11;
                    greska = 4;
                    mogucnostPreskakanjaPitanja = 3;
                    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 5:
                {
                    brojPitanja = 14;
                    greska = 3;
                    mogucnostPreskakanjaPitanja = 2;
                    i.putExtra("brojPitanja", brojPitanja);
                    i.putExtra("vreme", 85);
                    i.putExtra("pravoNaGreske", greska);
                    i.putExtra("nivo", nivo);
                    i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                    break;
                }
.
.
.
.
case 15:
            {
                brojPitanja = 24;
                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:
            {
                brojPitanja = 25;
                greska = 0;
                mogucnostPreskakanjaPitanja = 0;
                i.putExtra("brojPitanja", brojPitanja);
                i.putExtra("vreme", 30);
                i.putExtra("pravoNaGreske", greska);
                i.putExtra("nivo", nivo);
                i.putExtra("mogucnostPreskakanja", mogucnostPreskakanjaPitanja);
                break;
            }
            case 17:
            {
                Intent iFinale = new Intent(Kviz.this, Finale.class);
                iFinale.putExtra("UkupanSkor", brojacTacnihOdgovora);
                startActivityForResult(iFinale, 0);
                finish();
                break;
            }
        }
        cancelAllTimers();
        startActivityForResult(i, REQUEST);
    }

在我的关卡弹出中,我这样做是为了获得额外的东西:

Bundle extras = getIntent().getExtras();
        if(extras != null) {
            brojPitanja = getIntent().getIntExtra("brojPitanja", 0);
            pravoNaGreske = getIntent().getIntExtra("pravoNaGreske", 0);
            mogucnostPreskakanja = getIntent().getIntExtra("mogucnostPreskakanja", 0);
            vreme = getIntent().getIntExtra("vreme", 0);
            nivo = getIntent().getIntExtra("nivo", 0);
        }

我的整个弹出式课程:

public class Finale  extends Activity implements OnClickListener{


      TextView cestitamo,ukupanSkor;
      Button ok;
      int brojOdgovora;


    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.finale);

        if (getIntent().getExtras() != null)
            brojOdgovora = getIntent().getIntExtra("brojTacnihOdgovora", 0);

        inicijalizujVarijable();
    }

    private void inicijalizujVarijable()
      {
        Typeface localTypeface = Typeface.createFromAsset(getAssets(), "crazy_moj_3.ttf");
        cestitamo = (TextView) findViewById(R.id.tvCestitamo);
        cestitamo.setTypeface(localTypeface);
        ukupanSkor =(TextView) findViewById(R.id.tvUkupanSkor);
        ukupanSkor.setTypeface(localTypeface);
        ok = (Button) findViewById(R.id.bOKCestitamo);

        ukupanSkor.setText("You answered correctly on " + brojOdgovora + " of 300 questions!");

        ok.setOnClickListener(new View.OnClickListener()
        {
          public void onClick(View paramAnonymousView)
          {
            Intent localIntent = new Intent();
            setResult(RESULT_OK, localIntent);
            finish();
          }
        });
      }


    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

}

奇怪的是,我有一个弹出窗口"时间到了"并且我使用相同的例程和相同的代码来发送额外内容并显示用户得分的数量,并且工作正常。

1 个答案:

答案 0 :(得分:2)

  

它打开了我的一个级别弹出窗口,但所有信息都填充了零。

这是因为您将startActivityForResult(i, REQUEST)放在switch-case之外。当nova为17时,Intent i不会使用任何额外内容进行初始化,无论在哪个阶段,都会始终调用extras。因此,弹出窗口显示所有值均为0(来自您设置的默认值)。

  

按下OK后,它会打开最终弹出窗口,但不是总得分,而是0。

这是因为您为Intent iFinale使用了不同的名称。初始化UkupanSkor时,您使用brojTacnihOdgovora获得总分。但在Finale活动中,您使用的是Intent


我的建议是使用相同的case 17来启动活动,并根据阶段编号设置数据。您只需要更改case 17: { REQUEST = 0; // set the request code to 0 i = new Intent(Kviz.this, Finale.class); // set the intent to open final popup instead i.putExtra("brojTacnihOdgovora", brojacTacnihOdgovora); // set the extra name to match with the activity finish(); break; } 。尝试:

{{1}}