意图不提取额外的

时间:2010-08-03 15:21:02

标签: 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);
    editNote.putExtra(TasksDBAdapter.KEY_ID, id);
    startActivityForResult(editNote, EDIT_TASK_REQUEST);
}

此代码检索额外的 从不同的活动

 if (savedInstanceState != null) {
        id = savedInstanceState.getLong(TasksDBAdapter.KEY_ID);
    }
 Log.i(TAG, "Id of note = " + id);

在第一个代码段中,Logcat说:The id of the selected note is 2,但在第二个代码段中,Logcat说:Id of note = 0。刚刚发生了什么?解决这个非常烦人的问题。

2 个答案:

答案 0 :(得分:4)

我认为,当Activity暂停并且数据通过Activity传递到Intent时,您所保存的状态会让您感到困惑。

你希望有类似的东西:

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

传递给Bundle的{​​{1}}是您使用the onSaveInstanceState() method保存的onCreate(),而不是您添加到Bundle的附加内容Bundle

答案 1 :(得分:0)

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

id = getIntent().getLongExtra(TasksDBAdapter.KEY_ID, 0);
Log.i(TAG, "Id of note = " + id);

以下是此代码中发生的情况:getIntent()会返回您在第一个代码段(用于启动当前活动的Intent)中创建的Intent。然后,.getLongExtra()返回附加的额外信息。如果找不到该标记的额外信息且找到该数据类型(长整数),则返回0。

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