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系统关闭时保存应用程序的状态。请不要混淆这两者。请看我的黑体说明。请看我的黑体说明。