2011-06-24 50 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用于检索当活动被中止保存的数据。