2016-05-14 151 views
1

你好,我是新来的android和我有一个问题,我不知道如何解决。我有3项活动,ActivityMain,活动A活动B。 ActivityMain是开始活动。从ActivityMain用户可以移动到ActivityA,当他们这样做,一个值从ActivityMain传递给ActivityA这样的:正确传递活动之间的值

Intent i = new Intent(context, ActivityA.class); 
i.putExtra("eventId", eventId); 
startActivity(i); 

在我ActivityA的onCreate方法我有一个的init()功能获取价值是这样的:

public void init() { 
    this.eventId = Integer.parseInt(getIntent().getExtras().get("eventId").toString()); 
} 

现在,这是我的问题,因为某些原因,当我从ActivityA导航到ActivityB然后我点击我的背应用程序停止工作空指针异常引发上述代码行。

+0

检查的目的和你是从意图 –

+0

答案不是必要的检索整数空值,但你应该抓住NumberFormatException的..... – Skywalker

+0

i.putExtras(“事件ID”,EVENTID );试试这个代码.... –

回答

2

将数据从“Extra”缓存到变量 - 在活动中使用onResume()方法设置任何配置。

+0

我不明白,为什么onCreate()被称为当我按回来,是它应该如何工作? – user3718908

+0

这是正确的 - 活动生命周期有一个层次结构,它被遵循 - onStop在活动落后并返回时被调用 - 请参阅这里了解更多详细信息 - http://developer.android.com/reference/android/app/Activity.html# ActivityLifecycle – takrishna

+0

必须使用操作系统提供的“onResume”和“onCreate”句柄 - 您可以通过检查(“if”语句)来确定您的活动实例是否已经在backstack中,并跳过获取“bundle”通过getInt/getBoolean – takrishna

0

问题是你直接将数据传递给意图,试图从意图包中访问它,但不是意图。使用intent.getIntExtra("eventId")

替换:

Integer.parseInt(getIntent().getExtras().get("eventId").toString()); 

随着

eventId = getIntent().getIntExtra("eventId"); 

其次,如果你是EVENTID整数然后用intent.getIntExtra,如果事件ID为字符串,然后使用intent.getStringExtra

+0

谢谢,我没有看到“getInt()”函数,但有getIntExtra,它有两个参数。 – user3718908

+0

所以你有这个理由不接受答案;)没关系 – Pehlaj

+0

虽然这并没有解决我的问题,但看起来问题不在于我是如何传递值,而是当我移动到下一个活动来节省内存,所以无论何时我导航回onCreate首先被调用,而不是onStart。 – user3718908

1

如果你通过整数尝试像这样

this.eventId = getIntent().getExtras().getInt("eventId");  

或者如果你传递字符串。试试这个

this.eventId = Integer.parseInt(getIntent().getExtras().getString("eventId"));