我正在尝试使用bundle在两个类之间传递一个int。我已经在网上看了它似乎应该很容易做到,它只是不适合我:(任何帮助非常感谢!我试图在一个简单的游戏中将int生活从一个页面传递到另一个页面。
这是我从
传递的第一页的代码int life = 5;
....
if(input.equalsIgnoreCase(teststr))
{
Intent i = new Intent("com.name.PAGETWO");
i.putExtra("com.name.PAGETWO.life", life);
startActivity(i);
mpButtonClick.stop();
}
在第二页上,尝试接收int
Intent i = new Intent("com.name.PAGETWO");
Bundle extras = i.getExtras();
int temp2 = extras.getInt("life");
int life = temp2;
当我尝试运行它时,它会尝试继续第二页,然后只是说应用程序意外停止了,但是当我注释掉代码时它继续正常运行,所以我知道我肯定会放入这里的代码错了。提前谢谢!
答案 0 :(得分:4)
为什么一个全新的intent对象包含你传递的int?在receiver活动中,使用getIntent()
检索活动的启动意图。这个意图将包含你的额外内容。
答案 1 :(得分:3)
你在第二页上创建了一个全新的Intent,当然没有这个包。相反,您需要使用getIntent()检索调用Intent。
以下是您的第二页代码的外观:
int life = getIntent().getExtras().getInt("life");
编辑:再次查看您的代码,确保额外的密钥名称在两端都是一致的。可以肯定的是,我通常会使用最终变量。所以在你的第二个活动中(假设它是ActivityTwo
),在顶部(onCreate()
之外)声明这个:
final static public String EXTRA_LIFE = "life";
然后在调用活动中:
Intent i = new Intent(this, ActivityTwo.class);
i.putExtra(ActivityTwo.EXTRA_LIFE, life);
startActivity(i);
(你可能也错误地构建了你的意图;比较我的例子)。
在第二项活动中,在onCreate()
内:
int life = getIntent().getIntExtra(EXTRA_LIFE, 0);
(如果额外不存在,您可以将0
替换为您想要的默认值。)
这样你就不必担心拼写错误,可以依赖Eclipse的建议来确保你的一致性。