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 == 0requestCode == 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();的主要内容,如果未能解决你的问题,请参考以下文章

相机意图resultCode始终为Nougat返回取消

onActivityResult的resultCode一直为0

Request.Files 始终为空

Android 意图:总是得到 resultCode = 0

Android 9 ResolvableApiException onActivityResult 有 resultCode 0 RESULT_CANCELED

Android:requestCode 和 resultCode