2011-06-24 89 views
2

我似乎無法得到我的額外信息與意圖一起發送。意圖正確加載下一個活動,但沒有有效載荷。Android - Intent.putExtra()失敗

來電:

//a list item was clicked 
    protected void onListItemClick(ListView l, View v, int position, long id) 
    { 
    super.onListItemClick(l, v, position, id); 

    Intent i = new Intent(this, ProgramTracks.class); 

    i.putExtra("_id", id); 

    startActivity(i); 
    } 

接收機:

protected void onCreate(Bundle savedInstanceState) 
    { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.program_tracks); 

    if(savedInstanceState != null) 
    { 
     mDateId = savedInstanceState != null ? savedInstanceState.getLong("_id") : null; 

     Toast.makeText(this, "ID " + mDateId, Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     Toast.makeText(this, "Null!", Toast.LENGTH_SHORT).show(); 
    }  
    } 

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.site.android.app" 
    android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".MainActivity" android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".ProgramTracks" android:label="@string/app_name"> 
     </activity> 
    </application> 
</manifest> 

我不知道我錯過了什麼,但我如果一直祝酒空。

編輯:如果我Toast或記錄id變量獲得putExtra()'d,它被設置。

回答

6

在你原來的活動,你把「_id」作爲額外你的意圖,但在第二次練習中,您正試圖檢索來自savedInstanceState。

相反,你應該做這樣的事情:

Intent myIntent = getIntent(); 
Long id = myIntent.getLongExtra("_id", 0); 

其中0爲默認值,如果沒有長期被發現與標籤「_id」。

以下是another question關於從savedInstanceState和Intents獲取臨時演員的區別。

這裏是developer page關於在Intents中放置/獲得臨時演員。

+1

謝謝!接受,因爲你是第一個:) – Josh

+0

0做了竅門 – Tony

0

試試這個

Intent i = new Intent(MainActivity.this, ProgramTracks.class);
+0

這不適合我,仍然是空的。 – Josh

0

使用mDateId = intent.getLongExtra("_id", -1);

if(mDateId != -1) 
    Toast.makeText(this, "ID " + mDateId, Toast.LENGTH_SHORT).show(); 
+0

Intent.getLongExtra似乎不是有效的方法調用。 – Josh

1

試試這個:

Bundle bundle = getIntent().getExtras(); 
long _id = bundle.getLong("_id"); 
+0

謝謝!但isenp首先回答:) – Josh

+1

LOL - 不用擔心。正在回答,因爲他發佈。好吧。 – SBerg413

2

getIntent()getExtra()會給你的包

從包

然後你就可以得到所需要的值

+1

謝謝!但isenp回答了第一個:) – Josh

+1

歡迎,這很好,沒有增加得分:) – Atmaram

1

在接收機的onCreate()你需要獲得通過的變量使用

Bundle extras = getIntent().getExtras(); 
mDateId = extras.getLong("_id"); 

savedInstance僅用於您的Ac活力正在被重新創造。

+0

謝謝!但isenp先回答了:) – Josh

1

Neeraj幾乎是正確的。使用getIntent()檢索通過用於啓動活動的意圖傳遞的數據。

mDateId = getIntent().getLongExtra("_id", -1);

savedInstanceState用於檢索當活動被中止保存的數據。