Java startActivityForResult未正确发送额外内容
我有一个15级的问答游戏。在每个关卡之后,我会弹出一个包含一些信息的窗口(游戏关卡和一些关卡规则)。在15级之后,会出现一个最终弹出窗口,显示用户赢得多少分的信息。我使用startActivityForResult打开弹出窗口并发送一些附加信息,它工作正常,直到最后一个弹出窗口。在最后一场比赛之后,它应该打开带有总比分的最终弹出窗口。但它做得不好。它在“我的级别”弹出窗口中打开,但所有信息都用零填充。我不知道它是从哪里来的。在我按下OK之后,它会打开最后一个弹出窗口,但我得到的不是总分,而是0。代码如下:Java startActivityForResult未正确发送额外内容,java,android,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
}
}
奇怪的是,我有一个“时间到了”的弹出窗口,我使用相同的例程和相同的代码发送额外信息,并显示用户得分多少,效果很好
它会打开我的一个关卡弹出窗口,但所有信息都用零填充
发生这种情况是因为您将startActivityForResult(i,REQUEST)
放在开关盒
之外。当nova
为17时,Intent i
不会使用任何附加值初始化,无论处于哪个阶段,它都将始终被调用。因此,弹出窗口出现,所有值均为0(从您设置的默认值)
在我按下OK之后,它会打开最后一个弹出窗口,但我得到的不是总分,而是0
这是因为您的附加文件使用了不同的名称。初始化Intent iFinale
时,使用UkupanSkor
进行总分。但在最终活动中,您使用的是brojTacnihOdgovora
我的建议是使用相同的Intent
开始活动,并根据阶段编号设置数据。您只需更改案例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;
}
我想这是他们的延续,所以我相信你已经将他们的答案合并在一起了,你在这里发布的代码是最新的。另外,由于我看不到最后阶段的案例(case 16
,Finale?),您似乎错误地复制粘贴了弹出窗口的代码Intent
,因此请先添加case 15
和case 16
。这是最新的代码。我粘贴错了,你注意到了。我编辑了我的帖子,现在很好。重复了这么多代码!我建议您学习结构化编程技术,如方法和数组。