Java 不提取额外费用的意图

Java 不提取额外费用的意图,java,android,android-intent,extras,Java,Android,Android Intent,Extras,我有以下代码: protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Log.i(TAG, "The id of the selected note is " + id); Intent editNote = new Intent(this, TaskEditActivity.class);

我有以下代码:

protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Log.i(TAG, "The id of the selected note is " + id);
    Intent editNote = new Intent(this, TaskEditActivity.class);
    editNote.putExtra(TasksDBAdapter.KEY_ID, id);
    startActivityForResult(editNote, EDIT_TASK_REQUEST);
}
这段代码从不同的活动中检索额外的内容:


在第一个代码段中,Logcat说:
所选注释的id为2
,但在第二个代码段中,Logcat说:
注释的id=0
。刚才发生了什么事?这个非常烦人的问题的任何解决方案。

我认为您混淆了当
活动
暂停时保存的状态,以及通过
意图
传递到
活动
的数据

您想要的是:

Bundle extras = getIntent().getExtras();
id = extras.getLong(TasksDBAdapter.KEY_ID);

传递给
onCreate()的
是您保存时使用的
捆绑包
,而不是添加到
Intent
中的额外
捆绑包

我认为您混淆了当
活动
暂停时保存的状态,以及通过
Intent
活动
发送的数据

您想要的是:

Bundle extras = getIntent().getExtras();
id = extras.getLong(TasksDBAdapter.KEY_ID);

传递给
onCreate()
捆绑包
是您保存时使用的
捆绑包
,而不是您添加到
意图中的额外
捆绑包

您正在以一种非常错误的方式检索额外的内容。将第二个代码段替换为:

id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0);
Log.i(TAG, "Id of note = " + id);
下面是此代码中发生的情况:
getIntent()
返回在第一个代码段中创建的
Intent
(用于启动当前活动的
Intent
)。然后,
.getLongExtra()
返回附加的额外信息。如果找不到带有该标记和该数据类型(long)的额外信息,它将返回0


savedInstanceState
用于在低内存条件下被Android系统关闭时保存应用程序的状态。不要混淆这两者。

您以一种非常错误的方式检索额外的数据。将第二个代码段替换为:

id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0);
Log.i(TAG, "Id of note = " + id);
下面是此代码中发生的情况:
getIntent()
返回在第一个代码段中创建的
Intent
(用于启动当前活动的
Intent
)。然后,
.getLongExtra()
返回附加的额外信息。如果找不到带有该标记和该数据类型(long)的额外信息,它将返回0


savedInstanceState
用于在低内存条件下被Android系统关闭时保存应用程序的状态。请不要混淆这两者。

请看我的黑体说明。请看我的黑体说明。