2016-05-14 153 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"));