从onActivityResult intent检索putExtra值
我试图在使用StartActivityForResult之前将某些数据追加到intent中。从onActivityResult intent检索putExtra值
当意图在OnActivityForResult中返回时,我想访问我在意图中追加的数据。因此,我可以将意图中检索到的数据与数据库条目,容器ID等内容相关联。
不幸的是,返回的意图似乎与我开始的意图不一样。我试着在测试用例中比较(==)旧的和新的意图,并且结果失败,并且不奇怪,那么我尝试追加的数据就不存在了。是否有任何链接回到原始意图?
什么,我已经试过基本思想:
守则StartActivityForResult在伪代码:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
i.putExtra([-Key-], [int]);
i.putExtra([-Key-], [int]);
....
getParentFragment().startActivityForResult(i, requestCode);
的伪码OnActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
....
switch(requestcode){
case RESULT_LOAD_IMAGE :
//These always evaluate to default. The intent returns with the picture,
//and I process it fine (with default values), but any extra data i try to append
//to the intent is lost.
int rowId = intent.getIntExtra([-Key-], [-def_value-]);
....
....
break;
default:
throw new RuntimeException();
}
}
当您使用隐式意图发起活动分辨率,这是你在做这件事时所要做的:
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
....
getParentFragment().startActivityForResult(i, requestCode);
你没有任何保证,实际上会选择什么Activity来执行该操作。正因为如此,您的活动与将用于执行所需操作的活动之间没有任何“契约”。不幸的是,这是使用隐式Intent解析的缺点之一。由于这两项活动之间没有合同,因此您无法确定将在onActivityResult()
中返回给您的结果中包含哪些内容。
如果你看看documentation for ACTION_PICK
,它至少表明什么是“应该”发生(如果所选择的活动实际上表现的文件读取方式):
输入:的getData()是含有目录URI的数据 (vnd.android.cursor.dir/*)从中选择一个项目。
输出:选取的项目的URI。
这表示您应该提供一个包含数据目录的URI,并且您将返回一个包含所选项目URI的Intent
。而已。这就是你所期待的。您可以在Intent
中输入很多其他“额外”,您将其传递给活动ACTION_PICK
,但该活动并不关心这些额外内容,而只是忽略它们。执行ACTION_PICK
的活动将创建一个新的Intent
,其中包含所选项目的URI并将其传回给您。它没有通过你原来的Intent
回来。 “输入Intent
”和“输出Intent
”完全不同,彼此之间没有任何关系。
为了解决您的问题,我建议您创建一个唯一的整数requestCode
并将您的“额外”保存在与requestCode
相关的Activity
中的表格或地图中。然后,您可以使用requestCode
启动ACTION_PICK
活动。在onActivityResult()
中,您可以使用返回的requestCode
参数来查找您保存的“额外”,并且您可以将返回的URI与它们关联起来。
注意:还有一件事:当您拨打startActivityForResult()
时,您的活动将被暂停,并且启动的活动将会运行。在调用onActivityResult()
之前,您的活动将不会恢复。这意味着您在任何时候都只能有一个ACTION_PICK
挂起。出于这个原因,您可能不需要将特定PICK操作与任何给定数据相关联的方法。
你能描述PLZ这段代码的目的是什么?你想要达到什么目标? –
希望这个答案可以帮助你,http://*.com/a/2141166/2150044我在移动设备atm,但如果你仍然需要一个小时的帮助,我会发布我的回复 – NitroNbg
活动开始让我们用户选择一个图像(从手机,Picasa,谷歌等)。 当意图返回时,我想将意图与变量相关联,如sqlite中的rowID,容器/框架ID等。 我想我可以依赖意图按顺序启动并返回,只需将数据转储一个全局变量......我不确定最后一个关于顺序开始和返回的假设是否会持续。 – NameSpace