簡體   English   中英

結果代碼始終為 0,請求始終為 -1,。 Activity.onActivityResult();

[英]resultCode is always 0 and request is always -1, . Activity.onActivityResult();

我想將此添加到有關resultCode == 0requestCode == 0另一個問題列表中。

下面是簡介: NoteActivity調用NoteSettingsActivity使用startActivityForResult()

我在網上搜索過,當我按下后退按鈕時super.onBackPressed()resultCode == 0 經過進一步研究,似乎每當按下后退按鈕時它都會返回此代碼,但是在super.onBackPressed()調用並且只是簡單地finish()應用程序之后, onActivityResult()resultCode仍然等於 0。它與requestCode相同。

此外,我嘗試操作清單文件,我做了很多更改只是為了完成這項工作,但對我來說沒有任何作用。

這是片段。 請注意,我已恢復到之前的提交,因此我丟失了最近的修改,但是在我注意到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 的值丟失了我沿途發送的值。

任何幫助和指導將不勝感激。 非常感謝!

就我而言,由於兩個原因,我得到了 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()的調用最終會設置結果代碼並將其發送回調用活動。 將該調用替換為對finish()的調用,您應該會得到您正在尋找的結果代碼。

希望這可以幫助!

正確的簽名是

public void onActivityResult(int requestCode, int resultCode, Intent data) {

你有請求和結果混淆。

從設備上卸載應用程序時遇到了同樣的問題。 它通過放置解決:intentObject.putExtra(Intent.EXTRA_RETURN_RESULT, true); 在你做 startActivityForResult 之前。

對於來自The Android Big Nerd Ranch Book 的人來說,這可能是您的代碼中的錯字,請確保您正確比較:

if (requestCode == REQUEST_CODE_CHEAT) {
if (RESULT_OK == resultCode) {...} 
...
}

提醒: RESULT_OK始終為 -1,它的存在意味着setResult()是從子 Activity 調用的。

我知道我遲到了,但是:我遇到了 sam 問題,對我來說它不起作用,因為我在設置結果之前調用了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()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM