【问题标题】:resultCode is always 0 and request is always -1, . Activity.onActivityResult();resultCode 始终为 0,request 始终为 -1,。活动.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。我已经检查过传递给它的意图,它不为空。

以下是与这个问题非常相关的问题。他们都没有工作:

我在我的项目上浪费了很多重要的时间,只是为了弄清楚是什么让 resultCode 和 requestCode 的值失去了我一路发送的值。

我们将不胜感激任何帮助和指导。非常感谢!

【问题讨论】:

  • 第二个活动有任何标志吗?

标签: android onactivityresult start-activity


【解决方案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()
      }
      

      【讨论】:

        猜你喜欢
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        相关资源
        最近更新 更多