resultCode 始终为 0,request 始终为 -1,。活动.onActivityResult();
Posted
技术标签:
【中文标题】resultCode 始终为 0,request 始终为 -1,。活动.onActivityResult();【英文标题】:resultCode is always 0 and request is always -1, . Activity.onActivityResult(); 【发布时间】:2015-07-10 10:02:21 【问题描述】:我想将此添加到关于resultCode == 0
和requestCode == 0
的另一个问题列表中。
这里是概要:
NoteActivity
使用startActivityForResult()
调用NoteSettingsActivity
。
我在网上搜索过,当我按下返回按钮时super.onBackPressed()
,resultCode == 0
。好吧,经过进一步研究,似乎只要按下后退按钮,它就会返回此代码,但是在将super.onBackPressed()
调用搞砸之后,只是简单地finish()
应用程序onActivityResult()
的resultCode
仍然等于0。它与requestCode
相同。
另外,我尝试操作清单文件,我做了很多更改只是为了完成这项工作,但对我没有任何作用。
这里是sn-p。请注意,我已经恢复到我之前的提交,所以我丢失了我最近的修改,但是请在我注意到 resultCode
始终等于 0 (ACTIVITY_CANCELED
) 之前查看我编写的代码
@Override
public void onNoteSettingsActivityCalled(Note note)
Intent intent = new Intent(this, NoteSettingsActivity.class);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_ID, note.getNoteID());
startActivityForResult(intent, NoteRequest.REQUEST_UPDATE_SETTINGS);
这是活动检测到后按的时间:
@Override
public void onBackPressed()
Log.i(NoteApplication.TAG, "NoteSettingsActivity.onBackPressed() has been called.");
Intent intent = new Intent();
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDENABLED , mRemindEnabled);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDEVERY , mDaysSelected);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDON , String.valueOf(mRemindDateTime));
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_ID , mTargetNoteID);
if(getParent() != null)
getParent().setResult(Activity.RESULT_OK, intent);
else
setResult(Activity.RESULT_OK, intent);
super.onBackPressed();
以下是 NoteActivity 接收结果调用的方式。
@Override
public void onActivityResult(int result, int request, Intent intent)
super.onActivityResult(result, request, intent);
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() has been called.");
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() result = " + result + " request = " + request);
if(result == Activity.RESULT_CANCELED)
return;
switch(request)
case NoteRequest.REQUEST_UPDATE_SETTINGS:
if(intent == null) return;
int noteID = intent.getIntExtra(NoteExtrasKey.EXTRA_NOTE_ID, -1);
String remindOnString = intent.getStringExtra(NoteExtrasKey.EXTRA_NOTE_REMINDON);
if(remindOnString != null && !remindOnString.equals(""))
mRemindDateTime = Timestamp.valueOf(remindOnString);
mHasSettingsEnabled = true;
mRemindEnabled = intent.getBooleanExtra(NoteExtrasKey.EXTRA_NOTE_REMINDENABLED, false);
mSelectedDays = intent.getIntegerArrayListExtra(NoteExtrasKey.EXTRA_NOTE_REMINDEVERY);
if(noteID < 0)
Note note = mNoteDatabaseHelper.getNote(noteID);
note.setRemindEnabled(mRemindEnabled);
note.remindEvery(mSelectedDays);
note.remindOn(mRemindDateTime);
onNoteItemUpdated(note);
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() NoteRequest.REQUEST_UPDATE_SETTINGS called.");
break;
default:
Log.i(NoteApplication.TAG, "NoteActivity.onActivityResult() : unknown request code = " + request);
break;
resultCode
等于 0,requestCode
在我运行它时等于 -1。我已经检查过传递给它的意图,它不为空。
以下是与这个问题非常相关的问题。他们都没有工作:
android onActivityResult is always 0 How do I handle the back button when startActivityForResult is active? setResult does not work when BACK button pressed Android: startActivityForResult always gets a resultCode of 0? Android Calendar: onActivityResult's resultCode is always 0 onActivityResult always returns 0 onActivityResult() is being called at an unexpected time Android - startActivityForResult immediately triggering onActivityResult onActivityResult() called prematurely Activity result is always 0 Android: Gallery intent returning resultCode == RESULT_CANCELED Android on activity result always return 0 and null intent我在我的项目上浪费了很多重要的时间,只是为了弄清楚是什么让 resultCode 和 requestCode 的值失去了我一路发送的值。
我们将不胜感激任何帮助和指导。非常感谢!
【问题讨论】:
第二个活动有任何标志吗? 【参考方案1】:就我而言,由于两个原因,我得到了 resultCode == 0 错误。
首先,我从片段而不是从另一个活动中复制了方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
防止这种情况发生的一个好方法是@Override
您的方法,以便您知道您正在覆盖默认活动 onActivityResult 方法签名。
使用正确的签名:
public void onActivityResult(int requestCode, int resultCode, Intent data)
其次,我是这样做的:
super.onBackPressed();
Intent intent = new Intent();
intent.putExtra(getString(R.string.like_count), people.size());
Log.e(TAG, people.size() +" people ");
setResult(RESULT_OK, intent);
finish();
super.onBackPressed() 在实际设置之前设置了 resultCode,因此它导致了 0。
一个简单的修复使其正常工作:
Intent intent = new Intent();
intent.putExtra(getString(R.string.like_count), people.size());
Log.e(TAG, people.size() +" people ");
setResult(RESULT_OK, intent);
super.onBackPressed();
【讨论】:
它节省了我很多时间和精力..:) 使用super.onBackPressed();
我不确定是否是 IIRC,曾经有一次我信任 Android Studio 中以前版本的智能感知,我发誓它突出显示了第一个要填写为“resultCode”的参数,然后其次是“requestCode”,所以也许这就是原因。
漂亮干净的答案+1【参考方案2】:
正确的签名是
public void onActivityResult(int requestCode, int resultCode, Intent data)
您的请求和结果混淆了。
【讨论】:
我只是有点累了。我本可以注意到的!非常感谢!你救了我的命。 我没有弄乱签名,但我一直在检查resultCode,并认为我在寻找requestCode,希望它对以后来寻找答案的人有所帮助。【参考方案3】:对super.onBackPressed()
的调用最终将设置结果代码并将其发送回调用活动。将该调用替换为对finish()
的调用,您应该会得到您正在寻找的结果代码。
希望这会有所帮助!
【讨论】:
在我发布的链接上,我做了类似的事情。这行不通。 是的,已确认,我已按照建议进行了尝试。它也没有奏效。当我从那里创建一个按钮和 setResult 时,我会尝试看看这是否可以重现。 这里真的有必要调用 getParent() 吗?如果 NoteActivity 是调用活动并且 NoteSettingsActivity 是被调用的活动,您可以只调用 setResult() 而不是 getParent().setResult(),然后调用 finish() 来终止 NoteSettingsActivity。你试过吗? 我个人总是使用setResult()
,然后使用finish()
,它确实有效。不要使用super.onBackPressed()
。
我也做过。我提到这是在之前的提交中。但这也行不通。【参考方案4】:
在从设备上卸载应用程序时遇到了同样的问题。它通过放置解决了: intentObject.putExtra(Intent.EXTRA_RETURN_RESULT, true);在你做 startActivityForResult 之前。
【讨论】:
【参考方案5】:对于The Android Big Nerd Ranch Book 的读者,这可能是您的代码中的一个错字,请确保您的比较正确:
if (requestCode == REQUEST_CODE_CHEAT)
if (RESULT_OK == resultCode) ...
...
提醒:RESULT_OK
始终为 -1,它的存在意味着 setResult()
是从子 Activity 调用的。
【讨论】:
【参考方案6】:我知道我迟到了,但是:
我遇到了同样的问题,对我来说它不起作用,因为我在设置结果之前调用了onBackPressedDispatcher.onBackPressed()
。
像这样:
override fun onBackPressed()
onBackPressedDispatcher.onBackPressed() // <---- PROBLEM
val intent = Intent()
intent.putExtra("KEY", "VALUE"))
setResult(RESULT_OK, intent);
// AND here I tried with this calls without luck. -> requireActivity().finish() or super.onBackPressed()
【讨论】:
以上是关于resultCode 始终为 0,request 始终为 -1,。活动.onActivityResult();的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult的resultCode一直为0
Android 意图:总是得到 resultCode = 0
Android 9 ResolvableApiException onActivityResult 有 resultCode 0 RESULT_CANCELED