您好我在调用startActivityForResult()并尝试在onAcvityResult()方法中处理结果。但是,Intent数据为null,结果为RESULT_CANCELED。我不知道为什么会这样。
我正在创建活动:
startActivityForResult(new Intent(this, Class.class),LIST_RESULT);
然后在Activity类
中@Override
public void onBackPressed() {
super.onBackPressed();
Intent data = new Intent();
Bundle bundle = new Bundle();
bundle.putParcelable("name", la);
data.putExtras(bundle);
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
//finish();
}
完成()无效。事实上,我在LogCat中收到重复完成请求HistoryRecord
的警告我正在处理结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case(LIST_RESULT):
if(resultCode == Activity.RESULT_OK) {
previousList = data.getExtras();
}
break;
}
}
data为null,resultCode为Action.RESULT_CANCELED。
为什么我没有通过任何想法?在我设置和阅读它之间有什么改变吗?返回结果的活动中的mParent也为null。
亚历
答案 0 :(得分:28)
亚历,
我认为您要在finish()
方法中移除被叫onBackPressed()
,并将其替换为super.onBackPressed()
的号召。我相信拨打super.onBackPressed()
的电话正在呼叫结束,您永远不会有机会拨打setResult()
。
...试
@Override
public void onBackPressed() {
Intent data = new Intent();
Bundle bundle = new Bundle();
bundle.putParcelable("name", la);
data.putExtras(bundle);
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
super.onBackPressed();
}
答案 1 :(得分:0)
我查看了提出的解决方案和原始问题示例。在我的情况下,上面的相同错误是重用相同的requestCode值。
注意使用startActivityForResult的requestCode,每个Activity调用都应该有不同的requestCode。
如果您重复使用或不注意requestCode对每个Activity调用都是唯一的,您将收到以下错误消息:
“onActivityResult()在Activity完成后将Intent数据设为null”或“传递结果ResultInfo失败”。
为每个startActivityForResult使用变量定义,以确保清晰。离。
public static final int INITIATIVE_REQUEST = 11
Use a unique number for each of startActivityForResult.
再次对多个活动重复相同的requestCode将导致上述消息。