Android - Intent.putExtra()失败

时间:2011-06-24 15:09:48

标签: android android-activity android-intent manifest bundle

我似乎无法获得我的额外信息以及意图发送。意图正确加载下一个活动,但没有有效负载。

呼叫者:

  //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>

我不确定我错过了什么,但是我保持Toasting null。

编辑:如果我举报或记录获得id的{​​{1}}变量,则会设置。

7 个答案:

答案 0 :(得分:6)

在原始活动中,您将“_id”作为额外内容添加到意图中,但在第二个活动中,您尝试从savedInstanceState中检索long。

相反,你应该做这样的事情:

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

如果找不到带有标签“_id”的长号,则0为默认值。

这里是关于从savedInstanceState和Intents获取额外内容之间的区别的another question

这是关于在Intents中添加/获取额外内容的developer page

答案 1 :(得分:2)

getIntent()。getExtra()将为您提供包

然后从捆绑中,您可以获得所需的值

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分:1)

在Receiver的onCreate()中,您需要使用

获取传递的变量
Bundle extras = getIntent().getExtras();
mDateId = extras.getLong("_id");

savedInstance仅在重新创建活动时使用。

答案 4 :(得分:1)

<\ n> Neeraj几乎是对的。使用getIntent()检索通过用于启动活动的意图传递的数据。

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

savedInstanceState用于检索活动暂停时保存的数据。

答案 5 :(得分:0)

试试这个

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

答案 6 :(得分:0)

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

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