当前位置: 首页 > 知识库问答 >
问题:

resultCode始终为0,request始终为-1,.onActivityResult();

石正卿
2023-03-14

下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到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;
    }
}
    null

我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。

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

共有1个答案

欧阳骏俊
2023-03-14

在我的例子中,由于两个原因,我得到了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之前设置了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();
 类似资料:
  • 我总是用下面的代码得到。 这是我的process代码 但如果coderesultcode正常工作。 这是我的

  • 我开发了一个Android应用程序,提示日历应用程序编辑事件。 我使用打开日历。编辑并保存事件后,在中始终为0。 无论我在日历应用程序中单击“保存”还是“取消”,总是给出0。 另外,我需要从日历intent中获取数据,但是onActivityResult中的intent“data”也返回null。 有人能解释为什么会这样吗?有没有办法知道用户点击“保存”还是“取消”?

  • 问题内容: 我不知道我的代码正在发生什么。我没有错误,也没有回应。我正在将数据写入串行端口,并通过激活等待响应, 但未触发此事件,inputstream.available()始终返回0。可能是什么问题?我在Linux中使用RXTX。 编辑 我在主要方法上打开端口,并在应用程序内的按钮单击事件上发送消息。 问题答案: 不能用于进程间通信(包括串行),因为它仅检查当前进程中(输入缓冲区中)是否有可用

  • 问题内容: 我正在使用angularjs和laravel 4构建应用程序。一切都很好,但是我现在只允许XHR请求。 这就是我刚开始使用控制器时所拥有的。但是这个说法总是错误的。 在角度我正在使用标准的$ http服务。 问题答案: 进行AJAX调用时,标头通常设置为。Laravel的方法建立在Symfony2方法的基础上,该方法仅检查此标头的存在。 在2012年10月,Angular.js 删除了

  • 问题内容: 我在NetBeans IDE中有一个Java Swing应用程序。 我制作了一个表单,并将KeyListener附加到我的各种控件上,如下所示: 并定义如下: 我在上添加了,以查看会发生什么并验证我的键侦听器确实起作用。在构建和运行应用程序时,我意识到输出似乎总是有一个 为了验证这一点,我将println更改为,并且始终返回0。 我可能完全误解了KeyCode的功能,但我认为它会与Or

  • 我尝试将元素映射到[]以获得角度。但如果我检查了对象的长度,则始终为0。。 屏幕如果I控制台.log(对象) 我做错了什么?