resultCode始终为0,请求始终为-1.Activity.onActivityResult();

Neo*_*rge 10 android start-activity onactivityresult

我想将此添加到另一个关于resultCode == 0和的问题列表中requestCode == 0.

这是概要: 使用NoteActivity调用.NoteSettingsActivitystartActivityForResult()

我在网上搜索过,当我按下按钮的时候super.onBackPressed(),resultCode == 0.好后进一步研究,似乎它返回代码每次按下后退按钮,但拙劣地修补,经过super.onBackPressed()电话,只是简单finish()的应用onActivityResult()resultCode仍是等于0.它跟相同requestCode.

此外,我尝试操作清单文件,我做了很多更改只是为了让这项工作,但nothings对我有用.

这是片段.请注意,我已经恢复到我之前的提交,所以我已经失去了我最近的修改,但请注意我写的代码之前我注意到它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);
}
Run Code Online (Sandbox Code Playgroud)

这是检测到活动的时间:

@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();
}
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

resultCoderequestCode当我运行它时,等于0和requals -1.我检查了传递给它的意图,它不是null.

以下是与此问题非常相关的问题.他们都没有工作:

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

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

Sim*_*mon 23

就我而言,由于两个原因,我得到了resultCode == 0错误.

首先,我从片段而不是从另一个活动复制了该方法:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Run Code Online (Sandbox Code Playgroud)

防止这种情况发生的一个好方法是使用@Override您的方法,以便您知道您正在覆盖onActivityResult方法签名的默认活动.

使用正确的签名:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
Run Code Online (Sandbox Code Playgroud)

其次,我这样做:

    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();
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)


Fun*_*onk 4

正确的签名是

public void onActivityResult(int requestCode, int resultCode, Intent data) {
Run Code Online (Sandbox Code Playgroud)

您混淆了请求和结果。


归档时间:

查看次数:

15535 次

最近记录:

7 年,10 月 前